2012-07-09 13:15:55 +0000 2012-07-09 13:15:55 +0000
19
19

Jak ręcznie zatrzymać skrypt Pythona, który działa bez przerwy w systemie linux?

Mam skrypt Pythona, który jest uruchomiony i ciągle wyrzuca błędy do pliku dziennika.

Chcę edytować skrypt i uruchomić go ponownie, ale nie wiem, jak zatrzymać skrypt.

Obecnie jestem zalogowany na Linuksie poprzez PuTTy i tam wykonuję wszystkie czynności związane z kodowaniem. Więc, czy istnieje polecenie, aby zatrzymać skrypt python w linuxie?

Odpowiedzi (6)

35
35
35
2012-07-09 13:19:39 +0000

Będziesz musiał znaleźć id procesu (pid). jedną z komend, która to zrobi będzie

$> ps -ef

Aby ograniczyć wyniki do procesów pythona możesz grepować wynik

$> ps -ef | grep python

co da wyniki takie jak :

user 2430 1 0 Jul03 ? 00:00:01 /usr/bin/python -tt /usr/sbin/yum-updatesd

druga kolumna to pid. następnie użyj polecenia kill w następujący sposób:

$> kill -9 2430 (i.e. the pid returned)
7
7
7
2016-05-25 10:23:16 +0000

Spróbuj tej prostej linii, to zakończy wszystkie script.py:

pkill -9 -f script.py
7
7
7
2012-07-09 13:17:43 +0000

Znajdź id procesu (PID) skryptu i wydaj kill -9 PID aby zabić proces, chyba że jest on uruchomiony jako proces forground w terminalu, w którym to przypadku możesz Contrl-C aby go zabić.

Znajdź PID za pomocą tej komendy:

ps -elf | grep python

Wyświetla ono listę wszystkich procesów pythona, wybierz właściwy i zanotuj jego PID. Następnie

kill -9 <whatever_the_PID_is>

zabije ten proces. Możesz otrzymać komunikat o zakończeniu procesu na tym etapie.

Alternatywnie możesz użyć polecenia top, aby znaleźć proces Pythona. Po prostu wpisz k (dla kill), a program top zapyta Cię o PID procesu do zabicia. Czasami trudno jest zobaczyć wszystkie procesy, którymi jesteś zainteresowany za pomocą top, ponieważ mogą one przewijać się poza ekranem, myślę, że podejście ps jest łatwiejsze/lepsze.

4
4
4
2012-07-09 13:17:29 +0000

Jeśli program jest bieżącym procesem w powłoce, wpisanie Ctrl-C spowoduje zatrzymanie programu Pythona.

1
1
1
2014-07-15 17:16:12 +0000

W idealnym świecie, przeczytałbyś dokumentację skryptu i zobaczyłbyś, który sygnał(y) powinien być użyty, aby powiedzieć mu, że ma się zakończyć. W prawdziwym życiu, prawdopodobnie chcesz najpierw wysłać mu sygnał TERM, być może używając sygnału KILL, jeśli zignoruje TERM. Tak więc, to co robisz to znalezienie ID procesu, używając polecenia ps (jak ktoś już opisał). Następnie, możesz uruchomić kill -TERM <pid>. Niektóre programy czyszczą rzeczy, takie jak pliki, które mogą być otwarte, gdy dostaną taki sygnał, więc lepiej zacząć od czegoś takiego. Jeśli to się nie powiedzie, to nie pozostaje wiele do zrobienia poza wielkim młotkiem: kill -KILL <pid>. (możesz użyć wartości numerycznych, np. -KILL = -9, i prawdopodobnie nigdy się nie zmienią, ale w sensie teoretycznym bezpieczniej jest użyć nazw)

0
0
0
2015-03-25 11:03:19 +0000

Jeśli znasz nazwę skryptu, możesz zredukować całą pracę do jednego polecenia:

ps -ef | grep "script_name" | awk '{print $2}' | xargs sudo kill

Gdybyś chciał się upewnić, że to jest skrypt pythona:

ps -ef | grep "python script_name" | awk '{print $2}' | xargs sudo kill

Gdybyś chciał zabić wszystkie skrypty pythona:

ps -ef | grep "python" | awk '{print $2}' | xargs sudo kill

Przypuszczam, że łapiesz o co chodzi ;)

Przypominamy, że nazwę skryptu należy cytować “” tak jak w przykładach.