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

Come fermare manualmente uno script Python che gira continuamente su linux

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

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

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

Risposte (6)

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

Dovrete trovare l'id del processo (pid). un comando per fare questo sarebbe

$> ps -ef

per limitare i risultati ai processi python potete cercare 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. poi usate il comando kill come :

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

Provate questa semplice linea, terminerà tutti gli script.py:

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

Trovate il process id (PID) dello script ed emettete un comando kill -9 PID per uccidere il processo, a meno che non sia in esecuzione come vostro processo forground nel terminale, nel qual caso potete Contrl-C per ucciderlo.

Trova il PID con questo comando:

ps -elf | grep python

Elenca tutti i processi python, scegli quello giusto e nota il suo PID. Poi

kill -9 <whatever_the_PID_is>

ucciderà il processo. Potreste ricevere un messaggio sull'aver terminato un processo in questa fase.

In alternativa, potete usare il comando top per trovare il processo python. Inserite semplicemente k (per uccidere) e il programma top vi chiederà il PID del processo da uccidere. A volte è difficile vedere tutti i processi che vi interessano con top poiché potrebbero scorrere fuori dallo schermo, penso che l'approccio ps sia più facile/migliore.

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

Se il programma è il processo corrente nella vostra shell, digitando Ctrl-C fermerete il programma Python.

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

In un mondo perfetto, dovreste leggere la documentazione dello script e vedere quale segnale(i) dovrebbe essere usato per dirgli di finire. Nella vita reale, probabilmente vorrete inviargli il segnale TERM, prima, magari usando un segnale KILL se ignora il TERM. Quindi, quello che si fa è trovare l'ID del processo, usando il comando ps (come qualcuno ha già descritto). Poi si può eseguire kill -TERM <pid>. Alcuni programmi puliranno le cose, come i file che potrebbero avere aperti, quando ricevono un segnale come quello, quindi è più bello iniziare con qualcosa del genere. Se questo fallisce, allora non rimane molto da fare tranne il grande martello: kill -KILL <pid>. (potete 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
0
0
2015-03-25 11:03:19 +0000

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

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

Se volete essere sicuri che sia uno script python:

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

Se volete uccidere tutti gli script python:

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

Suppongo che abbiate capito l'idea ;)

Promemoria: dovete citare “” il nome dello script come negli esempi.