在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
您将看到罪魁祸首线程。