Esto funciona, pero mata todos los procesos de Python.

pkill python

Sin embargo, no puedo hacer:

pkill myscript.py

También probé killall , pero tampoco tuve suerte. ¿Tengo que usar expresiones regulares?

Por cierto, quiero hacer esto en un script de Python con import os.

7
TIMEX 23 oct. 2009 a las 03:34

5 respuestas

La mejor respuesta

¿Lanzaste el subproceso de Python desde el mismo script desde el que lo estás eliminando? Si es así, consulte esta pregunta para obtener más detalles. De lo contrario, puede usar la opción -f de pkill para buscar el nombre del script en la lista de argumentos del proceso de Python, pero aún corre el riesgo de matar algo que no pretendía. Consulte la página del manual para obtener más información.

6
Community 23 may. 2017 a las 10:32

Prueba esto:

echo '#!/usr/bin/env python' > myscript
cat myscript.py >>myscript
chmod +x myscript
./myscript

Por supuesto, tendrá que cambiar el código para eliminar un proceso llamado "myscript" En los sistemas UNIX, un archivo ejecutable contiene algunos bytes al principio que le indican al sistema operativo qué formato binario se está utilizando. Si los primeros dos bytes son #!, el SO asume que este es realmente un archivo de texto que puede ser ejecutado por otro programa, y el SO carga el otro programa y le pasa el archivo de texto.

En este caso, probablemente podría haber escrito #!/usr/bin/python en la línea superior, pero si su pitón está en /usr/local/bin, entonces no funcionaría. En cambio, aprovecho env para que busque su ruta normal para python. Todos los sistemas UNIX tienen env en / usr / bin. Para obtener un poco más de información, puede escribir man env.

-1
Michael Dillon 23 oct. 2009 a las 00:00

Necesita buscar el id del proceso (pid). Puede usar el comando "ps -A | grep NAME" y luego aplicar "kill -9 PID". Estos comandos se pueden traducir fácilmente a Python.

Intentar usar un "nombre" (como en pkill) puede producir múltiples coincidencias y, por lo tanto, resultados inesperados (al menos en el contexto establecido anteriormente en la pregunta).

0
jldupont 22 oct. 2009 a las 23:48

sudo kill -9 `pgrep python`

Este comando matará todos los procesos de Python en ejecución.

1
prabhakaran9397 24 abr. 2016 a las 21:06

¿Puede hacer que el proceso escriba su pid en un archivo?
En Python obtienes el pid así:

import os
os.getpid()

Matar por nombre es conveniente, pero a veces tiene consecuencias no deseadas como has visto.

2
John La Rooy 22 oct. 2009 a las 23:40