在Linux中,每个进程和每个线程都有广告:要注意,在Linux和基于UNIX操作系统一个最大PID值是非常重要的不同的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
(GR埃平为[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
您将看到的罪魁祸首线程。
'grep [8] 503'可能是一个老的Unix技巧,但是'ps -p8503'几乎是旧的,允许多个参数*和*也不会选择其他进程(比如18503和28503)。 – tzot 2009-12-22 22:43:25