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

19

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

Quiero editar el script y ejecutarlo nuevamente, 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?

Gunnar
fuente

Respuestas:

35

Tendrá que encontrar la identificación 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. luego use el comando kill como tal:

$> kill -9 2430 (i.e. the pid returned)
olly_uk
fuente
Eso es exactamente lo que estaba buscando. Gracias
7

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

Encuentre el PID con este comando:

ps -elf | grep python

Enumera todos los procesos de Python, selecciona el correcto y anota su PID. Luego

kill -9 <whatever_the_PID_is>

matará el proceso. Es posible que reciba un mensaje acerca de haber finalizado un proceso en esta etapa.

Alternativamente, puede usar el topcomando para encontrar el proceso de Python. Simplemente ingrese k(para matar) y el topprograma le solicitará el PID del proceso para matar. A veces es difícil ver todos los procesos que le interesan, topya que pueden desplazarse fuera de la pantalla, creo que el psenfoque es más fácil / mejor.

Levon
fuente
44
Bueno, antes de usarlo -9, lo mataría "suavemente" primero. Solo si no reacciona, lo usaría -9.
glglgl
No estoy familiarizado con el término "asesinato suave" ..
Levon
7

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

pkill -9 -f script.py
tirano saurio Rex
fuente
1
Esto es mucho mejor que buscar manualmente el PID si el nombre del script es único.
FlippingBinary
4

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

Ned Batchelder
fuente
Gran solución, necesitaba esto para probar.
Kuzon
1

En un mundo perfecto, leería la documentación del guión y vería qué señal (es) se deben usar para indicar que finalice. En la vida real, probablemente desee enviarle la señal TERM, primero, tal vez utilizando una señal KILL si ignora el TERM. Entonces, lo que debe hacer es encontrar la ID del proceso, utilizando el comando ps (como alguien ya describió). Entonces, puedes correr kill -TERM <pid>. Algunos programas limpiarán cosas, como archivos que podrían haber abierto, cuando reciban una señal como esa, por lo que es mejor comenzar con algo así. Si eso no funciona, entonces no hay mucho más que hacer, excepto el gran martillo: kill -KILL <pid>. (puede 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)

jrl
fuente
0

Si conoce el nombre del script, puede reducir todo el trabajo a un solo comando:

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

Si quieres asegurarte de que sea un script de Python:

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

Si quisieras matar todos los scripts de Python:

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

Supongo que tienes la idea;)

Recordatorio: debe "" citar el nombre del script tal como se muestra en los ejemplos.

Jesús
fuente