os.kill no genera un OSError, sin embargo, no veo el pid dado ejecutándose
Pregunta
En mi servidor ubuntu ejecuto el siguiente comando:
python -c 'import os; os.kill(5555, 0)'
Esto se hace para poder ver si el pid 5555 se está ejecutando.Según tengo entendido, esto debería generar un OSError si el pid no se está ejecutando.Esto no me genera un OSError, lo que significa que debería ser un proceso en ejecución.Sin embargo, cuando ejecuto:
ps aux | grep 5555
No veo ningún proceso ejecutándose con ese pid.Esto también sucede en varios otros pids en ese rango general, pero no sucede con, por ejemplo, 555 o 55555.
¿Alguien tiene alguna idea de por qué os.kill no genera un OSError como se espera?
Nota:esto se ejecuta en Python 2.5.1.
Solución
bajo Linux, cada proceso y cada hilo tiene un PID diferente. os.kill
no le importa si usted tiene un PID hilo, o un PID tarea, sin embargo ps
normalmente no muestran los PIDs de rosca.
Por ejemplo en mi máquina el proceso con PID 8502 ejecuta subprocesos que se puede ver como esto
$ ls /proc/8502/task/
8502 8503 8504 8505 8506 8507 8511 8512 8514 8659
Tenga en cuenta que 8503 no aparece en la lista de procesos
$ ps aux | grep [8]503
$
Sin embargo el uso de algunos argumentos más ps
se puede ver
$ ps -eLf | grep [8]503
ncw 8502 1 8503 0 10 10:00 ? 00:00:00 /usr/lib/virtualbox/VBoxSVC --automate
(grepping para [8]503
significa que el grep
no se mostrará - es un viejo truco UNIX)
Ahora vamos a ver si está vivo o no
$ python
Python 2.6.4 (r264:75706, Nov 2 2009, 14:44:17)
[GCC 4.4.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Loaded customisations from '/home/ncw/.pystartup'
>>> import os
>>> os.kill(8503, 0)
>>>
Esto duplica su problema.
Creo que si lo hace
ls /proc/*/task/5555
o
ps -eLf | grep [5]555
Usted verá el hilo culpable.
Otros consejos
Trate de instalar htop (sudo apt-get install htop), que presenta, a veces proceso que PS no.
Tal vez sea un error en 2.5? En 2.6.4 consigo:
gruszczy@gruszczy-laptop:~$ python -c 'import os; os.kill(5555, 0)'
Traceback (most recent call last):
File "<string>", line 1, in <module>
OSError: [Errno 3] No such process
Creo que hay un informe de error para esto:
http://mail.python.org /pipermail/new-bugs-announce/2009-February/004222.html
No sé por qué ese OSError no se genera en algunos casos, pero es importante tener en cuenta que hay un valor pid máximo en sistemas operativos basados en Linux y Unix:
$> cat /proc/sys/kernel/pid_max
32768