我使用kill -0 $pid
(从PID文件中读取$ pid)来检查守护程序是否正在运行。我刚刚发现即使kill -0 2661
返回0
,我也无法看到top
,htop
或ps 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
...
答案 0 :(得分:0)
ayecee 回答了我的问题。如果$pid
是正在投放的主题,则kill -0 $pid
将返回0,而ps -p $pid
将返回1.
我已通过从htop
手动挑选线程PID然后运行上述命令来验证此答案。