gpt4 book ai didi

linux - 为什么 `kill -0 $pid; echo $?` 和 `ps -p$pid; echo $?` 有时不同?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:28:25 25 4
gpt4 key购买 nike

我使用 kill -0 $pid(从 PID 文件读取 $pid)来检查守护进程是否正在运行。我刚刚发现即使kill -0 2661返回0,我也看不到top中运行的进程,htopps aux。特别是,ps -p $pid 返回 1

这是为什么?

示例输出:

$ pid=2661; kill -0 $pid; echo $?
0

$ pid=2661; ps -p $pid; echo $?
PID TTY TIME CMD
1

同理:

$ pid=2661; kill -0 $pid; echo $?; ps -p $pid; echo $?
0
PID TTY TIME CMD
1

编辑

似乎这种情况比我想象的更频繁。这是一个检查 PID 1 到 2000 的小片段(仅适用于 root):

# for pid in $(seq 1 2000); do killcode=$(kill -0 $pid 2>/dev/null; echo $?); pscode=$(ps -p $pid >/dev/null 2>&1; echo $?); if [ $killcode != $pscode ]; then echo $pid $killcode $pscode; fi done
820 0 1
821 0 1
822 0 1
974 0 1
977 0 1
1029 0 1
1030 0 1
...

最佳答案

ayecee 在 Freenode 上的#linux 中回答了我的问题。如果 $pid 是一个正在运行的线程kill -0 $pid 将返回 0,而 ps -p $pid 将返回 1。

我已经通过从 htop 中手动选择一个线程 PID 然后运行上述命令来验证这个答案。

关于linux - 为什么 `kill -0 $pid; echo $?` 和 `ps -p$pid; echo $?` 有时不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30958964/

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