在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
(Grepping for [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
你会看到罪魁祸首.