1
我使用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
...
那么,在第二个例子中,它看起来好像pid 2661不存在,所以人们希望看到来自'ps'的非零返回值。也许这个过程在你运行'kill -0'时没有退出? – larsks
不幸的是:'$ pid = 2661;杀-0 $ pid; echo $?; ps -p $ pid; echo $? PID TTY TIME CMD 1' – binwiederhier