2009-12-01 3 views
3

Sur mon serveur ubuntu je lance la commande suivante:os.kill ne pas soulever un OSError, mais je ne vois pas le pid donné en cours d'exécution

python -c 'import os; os.kill(5555, 0)' 

Ceci est fait pour que je puisse voir si pid 5555 est en marche . D'après ce que je comprends, cela devrait déclencher une OSError si le pid ne fonctionne pas. Cela ne déclenche pas un OSError pour moi, ce qui signifie qu'il devrait être un processus en cours. Cependant quand je cours:

ps aux | grep 5555 

Je ne vois aucun processus fonctionnant avec ce pid. Cela arrive également sur plusieurs autres pids dans cette gamme générale, mais cela n'arrive pas avec disons 555 ou 55555.

Quelqu'un a-t-il une idée de la raison pour laquelle os.kill ne déclencherait pas une erreur OSE comme prévu?

Remarque: cela fonctionne sous python 2.5.1.

Répondre

6

Sous linux, chaque processus et chaque fil ont ad ifferent pid. os.kill ne se soucie pas si vous avez un pid de thread, ou un pid de tâche, cependant ps ne montre normalement pas les pids de fil.

Par exemple, sur ma machine le processus avec PID 8502 est fils en cours d'exécution que vous pouvez voir comme ça

$ ls /proc/8502/task/ 
8502 8503 8504 8505 8506 8507 8511 8512 8514 8659 

Notez que 8503 ne figure pas dans la liste des processus

$ ps aux | grep [8]503 
$ 

Cependant, l'utilisation certains plus ps arguments vous pouvez le voir

$ ps -eLf | grep [8]503 
ncw  8502  1 8503 0 10 10:00 ?  00:00:00 /usr/lib/virtualbox/VBoxSVC --automate 

(Gr epping pour [8]503 signifie que le grep ne sera pas affiché - c'est un vieux truc unix)

permet maintenant de voir si elle est vivante ou non

$ 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) 
>>> 

Duplicata votre problème!.

Je pense que si vous faites

ls /proc/*/task/5555 

ou

ps -eLf | grep [5]555 

Vous verrez le fil coupable.

+0

'grep [8] 503' peut être un vieux truc d'Unix, mais' ps -p8503' est presque aussi vieux, permet plusieurs arguments * et * ne sélectionnera pas d'autres processus aussi (disons, pids 18503 et 28503). – tzot

1

Essayez d'installer htop (sudo apt-get install htop), il affiche parfois un processus que ps ne fait pas.

+0

ne voit rien non plus dans htop, en utilisant sa fonctionnalité de recherche. –

+0

effectivement après la recherche manuelle au lieu d'utiliser ce truc de recherche, j'ai trouvé le pid là-bas. Merci e-satis. –

1

Peut-être que c'est un bug dans 2.5? Sur 2.6.4 je reçois:

[email protected]:~$ 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 

je crois, il y a un rapport de bogue pour cela:

http://mail.python.org/pipermail/new-bugs-announce/2009-February/004222.html

+0

Ceci est le résultat que je reçois sur certains pids, mais pas 5555 –

+0

J'ai posté un lien vers un rapport de bogue sur des choses similaires. – gruszczy

0

Je ne sais pas pourquoi ce OSError ne se pose pas dans certains cas, mais il est important de noter qu'il ya une valeur maximale pid sur base linux et unix OS:

$> cat /proc/sys/kernel/pid_max 
32768 
Questions connexes