在我的 ubuntu 服务器上运行以下命令:
python -c 'import os; os.kill(5555, 0)'
这样做是为了查看 pid 5555 是否正在运行。根据我的理解,如果 pid 没有运行,这应该会引发 OSError 。这不会对我引发 OSError,这意味着它应该是一个正在运行的进程。但是当我跑步时:
ps aux | grep 5555
我看到没有进程以该 pid 运行。这种情况也会发生在该一般范围内的其他几个 pid 上,但不会发生在 555 或 55555 上。
有谁知道为什么 os.kill 不会像预期的那样引发 OSError 吗?
注意:这是在 python 2.5.1 下运行的。
linux下,各个进程and每个线程都有不同的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
or
ps -eLf | grep [5]555
您将看到罪魁祸首线程。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)