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

Cómo detener manualmente un script de Python que se ejecuta continuamente en linux

Tengo un script de Python que se está ejecutando y volcando continuamente errores en un archivo de registro.

Quiero editar el script y ejecutarlo de nuevo, pero no sé cómo detener el script.

Actualmente estoy conectado a Linux a través de PuTTy y estoy haciendo toda la codificación allí. Entonces, ¿hay un comando para detener el script de python en linux?

Respuestas (6)

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

Tendrá que encontrar el id del proceso (pid). un comando para hacer esto sería

$> ps -ef

para limitar los resultados a los procesos de python puede grep el resultado

$> ps -ef | grep python

que dará resultados como :

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

la segunda columna es el pid. a continuación, utilice el comando kill como tal :

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

Pruebe esta simple línea, terminará todos los script.py:

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

Encuentre el identificador de proceso (PID) del script y emita un kill -9 PID para matar el proceso a menos que se esté ejecutando como su proceso forground en la terminal en cuyo caso puede Contrl-C para matarlo.

Encuentra el PID con este comando:

ps -elf | grep python

Enumera todos los procesos python, elige el correcto y anota su PID. Entonces

kill -9 <whatever_the_PID_is>

matará el proceso. Es posible que reciba un mensaje sobre la terminación de un proceso en esta etapa.

Como alternativa, puede utilizar el comando top para encontrar el proceso de python. Simplemente introduzca k (para matar) y el programa top le pedirá el PID del proceso a matar. A veces es difícil ver todos los procesos que te interesan con top ya que pueden salirse de la pantalla, creo que el enfoque ps es más fácil/mejor.

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

Si el programa es el proceso actual en su shell, al escribir Ctrl-C se detendrá el programa Python.

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

En un mundo perfecto, leerías la documentación del script y verías qué señal(es) deberías usar para decirle que termine. En la vida real, probablemente querrá enviarle la señal TERM, primero, tal vez usando una señal KILL si ignora el TERM. Entonces, lo que se hace es encontrar el ID del proceso, usando el comando ps (como alguien ya describió). Entonces, puedes ejecutar kill -TERM <pid>. Algunos programas limpiarán cosas, como archivos que puedan tener abiertos, cuando reciban una señal como esa, así que es mejor empezar con algo así. Si eso falla, entonces no hay mucho más que hacer excepto el gran martillo: kill -KILL <pid>. (puedes usar los valores numéricos, por ejemplo -KILL = -9, y probablemente nunca cambiarán, pero en un sentido teórico podría ser más seguro usar los nombres)

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

Si conoces el nombre del script puedes reducir todo el trabajo a un solo comando:

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

Si quieres asegurarte de que es un script de python

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

Si quieres matar todos los scripts de python

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

Supongo que entiendes la idea ;)

Recordatorio: es necesario citar “” el nombre del script tal y como está en los ejemplos.