Napisałem program w IDLE do tokenizacji plików tekstowych i zaczyna tokeniza 349 plików tekstowych! Jak mogę to zatrzymać? Jak mogę zatrzymać działający program w języku Python?
Napisałem program w IDLE do tokenizacji plików tekstowych i zaczyna tokeniza 349 plików tekstowych! Jak mogę to zatrzymać? Jak mogę zatrzymać działający program w języku Python?
Odpowiedzi:
Aby zatrzymać program, po prostu naciśnij Control + C.
^C
w terminalu, a monitor systemu pokazał, że Python nadal zużywa dużo procesora ...
Ctrl + Z
(przynajmniej na Linuksie). Następnie, jeśli chcesz go zabić, biegnij, kill %n
gdzie „n” jest liczbą, którą otrzymałeś obok „Zatrzymano” po naciśnięciu Ctrl + Z
. Jeśli chcesz go wznowić, biegnij fg
.
Możesz to również zrobić, jeśli używasz exit()
funkcji w swoim kodzie. Bardziej idealnie, możesz to zrobić sys.exit()
. sys.exit()
co może zakończyć działanie Pythona, nawet jeśli uruchamiasz rzeczy równolegle w multiprocessing
pakiecie.
Uwaga: aby użyć programu sys.exit()
, musisz go zaimportować:import sys
sys.exit(1)
nie zatrzymują procesu. Zasadniczo mam wiele wątków, a każdy z nich blokuje zewnętrzne procesy uruchomione przez Popen
. Potrzebuję opcji jądrowej, aby zabić wszystkie procesy podrzędne utworzone przez proces Pythona, a także sam proces Pythona. Nie znalazłem do tej pory.
Jeśli twój program działa na konsoli interaktywnej, naciśnięcie CTRL+ Cspowoduje zgłoszenie KeyboardInterrupt
wyjątku w głównym wątku.
Jeśli program w Pythonie go nie złapie, KeyboardInterrupt
spowoduje to zamknięcie Pythona. Jednak except KeyboardInterrupt:
blok lub coś w rodzaju gołego except:
zapobiegnie faktycznemu zatrzymaniu skryptu przez ten mechanizm.
Czasami, jeśli KeyboardInterrupt
nie działa, możesz SIGBREAK
zamiast tego wysłać sygnał; w systemie Windows CTRL+ Pause/Breakmoże być obsługiwane przez interpreter bez generowania przechwytywalnego KeyboardInterrupt
wyjątku.
Jednak te mechanizmy działają głównie tylko wtedy, gdy interpreter języka Python działa i reaguje na zdarzenia systemu operacyjnego. Jeśli interpreter języka Python z jakiegoś powodu nie odpowiada, najskuteczniejszym sposobem jest zakończenie całego procesu systemu operacyjnego, na którym działa interpreter. Mechanizm tego zależy od systemu operacyjnego.
W środowisku powłoki w stylu uniksowym możesz nacisnąć CTRL+, Zaby zawiesić dowolny proces aktualnie kontrolujący konsolę. Po odzyskaniu zachęty powłoki możesz użyć jobs
do wyświetlenia zawieszonych zadań i możesz zabić pierwsze zawieszone zadanie kill %1
. (Jeśli chcesz go ponownie uruchomić, możesz kontynuować zadanie na pierwszym planie, używając fg %1
; więcej informacji można znaleźć w instrukcji obsługi powłoki).
Alternatywnie, w środowisku uniksowym lub uniksopodobnym można znaleźć PID procesu Pythona (identyfikator procesu) i zabić go za pomocą PID. Użyj czegoś podobnego ps aux | grep python
do sprawdzenia, które procesy Pythona są uruchomione, a następnie użyj kill <pid>
do wysłania SIGTERM
sygnału.
kill
Komenda wysyła na Unix SIGTERM
domyślnie, a program można zainstalować Python obsługi sygnału za SIGTERM
pomocą signal
modułu. Teoretycznie każdy program obsługujący sygnał SIGTERM
powinien z wdziękiem zakończyć proces. Ale czasami, jeśli proces utknie (na przykład jest zablokowany w nieprzerywalnym stanie uśpienia IO), SIGTERM
sygnał nie ma wpływu, ponieważ proces nie może nawet obudzić się, aby go obsłużyć.
Aby wymusić zabicie procesu, który nie reaguje na sygnały, musisz wysłać SIGKILL
sygnał, czasami określany jako kill -9
ponieważ 9
jest wartością liczbową SIGKILL
stałej. Z wiersza poleceń możesz użyć kill -KILL <pid>
(lub kill -9 <pid>
w skrócie), aby wysłać a SIGKILL
i natychmiast zatrzymać proces.
W systemie Windows nie masz systemu Unix sygnałów procesowych, ale możesz wymusić zakończenie działającego procesu za pomocą TerminateProcess
funkcji. Interaktywnie najłatwiej to zrobić, otwierając Menedżera zadań, znajdując python.exe
proces odpowiadający Twojemu programowi i klikając przycisk „Zakończ proces”. Możesz również użyć taskkill
polecenia do podobnych celów.
Ctrl + C
.exit()
możesz to zrobić.pkill -f name-of-the-python-script
.python script.py&
Ctrl-Break jest potężniejszy niż Ctrl-C
Aby zatrzymać działający program, użyj Ctrl+, Caby zakończyć proces.
Aby obsłużyć to programowo w Pythonie, zaimportuj sys
moduł i użyj sys.exit()
miejsca, w którym chcesz zakończyć program.
import sys
sys.exit()
Aby zatrzymać skrypt Pythona za pomocą klawiatury: Ctrl
+C
Aby zatrzymać to za pomocą kodu (zadziałało to dla mnie w Pythonie 3):
import os
os._exit(0)
możesz także użyć:
import sys
sys.exit()
lub:
exit()
lub:
raise SystemExit
Ctrl + Z powinno to zrobić, jeśli zostaniesz złapany w powłoce Pythona. Należy pamiętać, że instancje skryptu mogą nadal działać w tle, więc pod Linuksem musisz zabić odpowiedni proces.
jobs
lub ps
wtedy kill 8923754
lub jakikolwiek identyfikator zadania / identyfikator procesu, który musisz zabić
Control+ Ddziała u mnie w systemie Windows 10. exit()
Działa też umieszczanie na końcu.
exit () zabije jądro, jeśli jesteś w Jupyter Notebook, więc nie jest to dobry pomysł. raise
polecenie zatrzyma program.
Aby zatrzymać program, po prostu naciśnij CTRL+D
lub exit()
.
Naciśnij Ctrl+ Alt+, Deletea pojawi się Menedżer zadań. Znajdź uruchomione polecenie Pythona, kliknij je prawym przyciskiem myszy i kliknij Zatrzymaj lub Zabij.
ctrl+c
powinien go zabić. Alternatywnie,kill -9
to