gpt4 book ai didi

python - os.kill 没有引发 OSError,但是我没有看到给定的 pid 正在运行

转载 作者:太空狗 更新时间:2023-10-30 02:06:41 25 4
gpt4 key购买 nike

在我的 ubuntu 服务器上运行以下命令:

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

最佳答案

在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

您将看到罪魁祸首线程。

关于python - os.kill 没有引发 OSError,但是我没有看到给定的 pid 正在运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1826824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com