在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