2009-10-22 11 views
7

Esto funciona, pero mata todos los procesos de Python.Mata el proceso usando su nombre dentro de linux (Python)

pkill python 

Sin embargo, no puedo hacer:

pkill myscript.py 

también he intentado killall, pero sin suerte tampoco. ¿Tengo que usar expresiones regulares?

Por cierto, quiero hacer esto en una secuencia de comandos python con import os.

Respuesta

5

¿Lanzó el subproceso de Python desde el mismo script desde el que lo está matando? Si es así, vea this question para 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 tenía la intención de hacerlo. Vea el man page para más información.

0

necesita buscar la identificación 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 utilizar un "nombre" (como en pkill) puede dar lugar a múltiples coincidencias y, por lo tanto, a resultados inesperados (al menos en el contexto establecido anteriormente en la pregunta).

+0

qué es tan diferente de 'pkill'? – hasen

+0

No NECESITA utilizar un pid. Puede usar cualquier medio para identificar el proceso que su asesino de procesos le permite usar. Todos * nix usan un pid internamente, pero a veces las personas quieren eliminar todos los procesos que coincidan con un patrón, no solo un pid específico. –

+0

... pero al final se llega a un pid: como mencioné anteriormente, uno tiene más cambios para matar el proceso involuntario yendo por otros medios. Estado allí. – jldupont

2

¿Puede hacer que el proceso escriba pid en un archivo?
En Python que obtener el PID de esta manera:

import os 
os.getpid() 

matanza por su nombre es conveniente, pero a veces tiene consecuencias no deseado, como han visto.

+1

Creo que está intentando eliminar un script de python específico de la línea de comandos (regular), no hacer algo de python – hasen

+0

It se aplica a ambos. Me gustaría usar el pkill myscript.py ... solo para aprender a hacerlo en la línea de comando – TIMEX

+1

@hasen, aún así es más fácil si tienes un archivo pid, 'kill 'cat pid'' usando patillas en su lugar de ''' –

-1

Prueba esto:

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

Por supuesto que tendrá que cambiar el código de matar a un proceso llamado "miscript" En los sistemas UNIX, un archivo ejecutable contiene unos pocos bytes al principio, que le dicen al sistema operativo qué formato binario se está utilizando. Si los dos primeros bytes son #!, entonces el sistema operativo asume que esto es en realidad un archivo de texto que puede ser ejecutado por otro programa, y ​​el sistema operativo 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 su lugar, aprovecho env para hacer que busque su ruta normal de python. Todos los sistemas UNIX tienen env en/usr/bin. Para obtener un poco más de información, puede escribir man env.

2

sudo kill -9 `pgrep python`

Este comando va a matar a todos los procesos en ejecución pitón

Cuestiones relacionadas