2009-12-01 61 views
3

在我的Ubuntu服务器特定的PID我运行下面的命令:os.kill不是抛出一个OSERROR,但我没有看到运行

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下运行的。

回答

6

在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]503grep不会出现 - 这是一个老的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 

您将看到的罪魁祸首线程。

+0

'grep [8] 503'可能是一个老的Unix技巧,但是'ps -p8503'几乎是旧的,允许多个参数*和*也不会选择其他进程(比如18503和28503)。 – tzot 2009-12-22 22:43:25

1

尝试安装htop(sudo apt-get install htop),它有时会显示ps没有的过程。

+0

在htop中看不到任何东西,使用它的搜索功能。 – 2009-12-01 15:47:49

+0

实际上在手动搜索它而不是使用搜索的东西之后,我确实找到了那里的pid。感谢e-satis。 – 2009-12-01 16:24:26

1

也许这是2.5中的错误?在2.6.4,我得到:

[email protected]:~$ python -c 'import os; os.kill(5555, 0)' 
Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
OSError: [Errno 3] No such process 

我相信,有此错误报告:

http://mail.python.org/pipermail/new-bugs-announce/2009-February/004222.html

+0

这是我得到的一些pid的结果,但不是5555 – 2009-12-01 15:38:10

+0

我发布了一个关于类似的东西的错误报告的链接。 – gruszczy 2009-12-01 15:40:51

0

我不知道为什么OSERROR不是在某些情况下提出的,但

$> cat /proc/sys/kernel/pid_max 
32768 
相关问题