Jak ręcznie zatrzymać skrypt Pythona, który działa nieprzerwanie na Linuksie

19

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

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

Obecnie jestem zalogowany na Linuksie za pośrednictwem PuTTy i tam zajmuję się kodowaniem. Czy istnieje polecenie zatrzymania skryptu python w systemie Linux?

Gunnar
źródło

Odpowiedzi:

35

Musisz znaleźć identyfikator procesu (pid). wystarczy jedno polecenie, aby to zrobić

$> ps -ef

aby ograniczyć wyniki do procesów Pythona, możesz grep 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 jako takiego:

$> kill -9 2430 (i.e. the pid returned)
olly_uk
źródło
Właśnie tego szukałem. Dziękuję
8

Wypróbuj tę prostą linię, zakończy wszystkie script.py:

pkill -9 -f script.py
trex
źródło
1
Jest to o wiele lepsze niż ręczne wyszukiwanie PID, jeśli nazwa skryptu jest unikalna.
FlippingBinary
7

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

Znajdź PID za pomocą tego polecenia:

ps -elf | grep python

Zawiera listę wszystkich procesów Pythona, wybierz właściwy i zanotuj jego PID. Następnie

kill -9 <whatever_the_PID_is>

zabije proces. Na tym etapie może pojawić się komunikat o zakończeniu procesu.

Alternatywnie możesz użyć toppolecenia, aby znaleźć proces python. Po prostu wpisz k(dla zabicia), a topprogram wyświetli monit o podanie PID procesu zabicia. Czasami trudno jest zobaczyć wszystkie procesy, którymi jesteś zainteresowany, topponieważ mogą one przewijać ekran, myślę, że pspodejście jest łatwiejsze / lepsze.

Levon
źródło
4
Cóż, przed użyciem -9zabiłbym go najpierw „miękko”. Tylko jeśli to nie zareaguje, skorzystałbym -9.
glglgl,
Nie zna terminu „miękkie zabijanie”.
Levon,
4

Jeśli program jest bieżącym procesem w twojej powłoce, wpisanie Ctrl-C zatrzyma program Python.

Ned Batchelder
źródło
Świetne rozwiązanie, potrzebne do testowania.
Kuzon
1

W idealnym świecie przeczytasz dokumentację skryptu i zobaczysz, jakich sygnałów należy użyć, aby nakazać mu zakończenie. W prawdziwym życiu prawdopodobnie chcesz wysłać mu sygnał TERM, po pierwsze, być może używając sygnału KILL, jeśli ignoruje TERM. Więc to, co robisz, to znajdź identyfikator procesu za pomocą polecenia ps (jak ktoś już opisał). Następnie możesz biegać kill -TERM <pid>. Niektóre programy czyszczą rzeczy, takie jak pliki, które mogły otworzyć, gdy otrzymają taki sygnał, więc fajniej jest zacząć od czegoś takiego. Jeśli to się nie powiedzie, to nie ma tam wiele do zrobienia oprócz wielkiego młota: kill -KILL <pid>. (możesz użyć wartości liczbowych, np. -KILL = -9, i prawdopodobnie nigdy się nie zmienią, ale w sensie teoretycznym bezpieczniej byłoby używać nazw)

jrl
źródło
0

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

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

Jeśli chcesz się upewnić, że jest to skrypt Pythona:

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

Jeśli chcesz zabić wszystkie skrypty python:

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

Podejrzewam, że masz pomysł;)

Przypomnienie: musisz zacytować nazwę skryptu jak w przykładach.

Jezus
źródło