os.kill не вызывает ошибку OSError, однако я не вижу, чтобы данный pid работал

StackOverflow https://stackoverflow.com/questions/1826824

  •  11-09-2019
  •  | 
  •  

Вопрос

На моем сервере Ubuntu я запускаю следующую команду:

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

Это сделано для того, чтобы я мог видеть, работает ли pid 5555.Насколько я понимаю, это должно вызвать ошибку OSError, если pid не запущен.У меня это не вызывает OSError, а это значит, что это должен быть запущенный процесс.Однако когда я бегу:

ps aux | grep 5555

Я не вижу ни одного процесса, работающего с этим pid.Это также происходит с несколькими другими пидами в этом общем диапазоне, но этого не происходит, скажем, с 555 или 55555.

Кто-нибудь знает, почему os.kill не вызывает ошибку OSError, как ожидается?

Примечание:это работает под управлением Python 2.5.1.

Это было полезно?

Решение

В Linux каждый процесс и каждый поток имеет свой pid. os.kill однако не волнует, есть ли у вас pid потока или pid задачи ps обычно не показывает PID потоков.

Например, на моей машине процесс с PID 8502 запускает потоки, которые вы можете увидеть следующим образом.

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

Обратите внимание, что 8503 не отображается в списке процессов.

$ ps aux | grep [8]503
$

Однако используя еще несколько ps аргументы, вы можете это увидеть

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

(В поисках [8]503 означает, что grep не появится — это старый трюк Unix!)

Теперь посмотрим, жив он или нет

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

Это дублирует вашу проблему.

Я думаю, если ты это сделаешь

ls /proc/*/task/5555

или

ps -eLf | grep [5]555

Вы увидите виновную ветку.

Другие советы

Попробуйте установить htop (sudo apt-get install htop), иногда отображается процесс, которого нет в ps.

Может это баг 2.5?На 2.6.4 получаю:

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

Я считаю, что для этого есть отчет об ошибке:

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

Я не знаю, почему в некоторых случаях эта OSError не возникает, но важно отметить, что в ОС Linux и Unix существует максимальное значение pid:

$> cat /proc/sys/kernel/pid_max
32768
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top