Come fermare manualmente uno script Python che gira continuamente su Linux


19

Ho uno script Python che è in esecuzione e scarica continuamente errori in un file di registro.

Voglio modificare lo script ed eseguirlo di nuovo, ma non so come fermarlo.

Attualmente sono loggato su Linux tramite PuTTy e sto facendo tutto il codice lì. Quindi, c'è un comando per fermare lo script Python in Linux?

Risposte:


35

Dovrai trovare l'id del processo (pid). un comando per farlo sarebbe

$> ps -ef

per limitare i risultati ai processi Python è possibile grep il risultato

$> ps -ef | grep python

che darà risultati come:

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

la seconda colonna è il pid. quindi usa il comando kill come tale:

$> kill -9 2430 (i.e. the pid returned)

Questo è esattamente quello che stavo cercando. Grazie

7

Trova l'ID processo (PID) dello script ed emetti un kill -9 PIDper terminare il processo a meno che non sia in esecuzione come processo forground sul terminale, nel qual caso puoi Contrl-C per ucciderlo.

Trova il PID con questo comando:

ps -elf | grep python

Elenca tutti i processi Python, seleziona quello giusto e nota il suo PID. Poi

kill -9 <whatever_the_PID_is>

ucciderà il processo. È possibile che venga visualizzato un messaggio relativo alla conclusione di un processo in questa fase.

In alternativa, puoi usare il topcomando per trovare il processo python. Basta inserire k(per uccidere) e il topprogramma richiederà il PID del processo per uccidere. A volte è difficile vedere tutti i processi che ti interessano toppoiché possono scorrere fuori dallo schermo, penso che l' psapproccio sia più facile / migliore.


4
Bene, prima di usarlo -9, lo ucciderei "dolcemente" prima. Solo se non reagisce, lo userei -9.
glglgl

Non ho familiarità con il termine "soft killing".
Levon,

7

Prova questa semplice riga, terminerà tutto script.py:

pkill -9 -f script.py

1
È molto meglio che cercare manualmente il PID se il nome dello script è univoco.
FlippingBinary

4

Se il programma è il processo corrente nella tua shell, digitando Ctrl-C si fermerà il programma Python.


Ottima soluzione, necessaria per i test.
Kuzon,

1

In un mondo perfetto, leggeresti la documentazione della sceneggiatura e vedresti quali segnali dovrebbero essere usati per dire che finiscono. Nella vita reale, probabilmente vuoi inviargli il segnale TERM, prima, magari usando un segnale KILL se ignora il TERM. Quindi, quello che fai è trovare l'ID processo, usando il comando ps (come qualcuno ha già descritto). Quindi, puoi correre kill -TERM <pid>. Alcuni programmi puliranno cose, come file che potrebbero avere aperti, quando ricevono un segnale del genere, quindi è meglio iniziare con qualcosa del genere. Se non funziona, quindi non c'è molto da fare, tranne il grande martello: kill -KILL <pid>. (puoi usare i valori numerici, ad esempio -KILL = -9, e probabilmente non cambieranno mai, ma in senso teorico potrebbe essere più sicuro usare i nomi)


0

Se conosci il nome dello script potresti ridurre tutto il lavoro a un singolo comando:

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

Se vuoi assicurarti che si tratti di uno script Python:

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

Se volessi uccidere tutti gli script Python:

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

Suppongo che tu abbia avuto l'idea;)

Promemoria: è necessario citare "" il nome dello script come negli esempi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.