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