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.

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top