出力でps aux
プロセスがうまくいくことがわかります。
# ps aux | grep diff
root 7787 28.7 0.0 9368 4516 pts/3 D+ 13:56 20:33 diff -qr mnt/mnt/md/ mnt/mnt2/
root 13130 0.0 0.0 6144 876 pts/4 S+ 15:07 0:00 grep diff
しかし、pidof
何も見つからないと主張します。
# pidof diff
# echo $?
1
マニュアルページを見ると、プロセスが失われたときに何をすべきかについての情報はありません。 pidofはそうではありません。/proc/7787/exe
はシンボリックリンクであり、/usr/bin/diff
それ/usr/bin/diff
自体は通常のファイルであり、ELFです。マニュアルページによると、これは一致する必要があります。
答え1
若干の調査の終わりにプロセスの状態も確認されているstrace
ようです。pidof
私のプロセスはdiff
ほとんどの時間状態です。これは、I/O を待っていることを意味します。D
この知識に基づいて、私はpidof
何度も(約3秒で)実行しました。
# pidof diff
7787
# pidof diff
# pidof diff
7787
# pidof diff
# pidof diff
# pidof diff
# pidof diff
# pidof diff
# pidof diff
# pidof diff
# pidof diff
# pidof diff
# pidof diff
7787
# pidof diff
7787
pidof
「時々」を返しますが、状態ではなくプロセスだけを返すという疑惑を確認するようですD
。
pidof
src/killall5.c
in(を使って得た)のソースコードを確認すると、apt source sysvinit-utils
599行に答えがあります。
if ( (strchr(process_status, 'D') != NULL) ||
(strchr(process_status, 'Z') != NULL) ){
/* Ignore zombie processes or processes in
disk sleep, as attempts
to access the stats of these will
sometimes fail. */
答え2
sysvinit 2.96以降には、pidof -z
ディスクI / O( 'D')またはゾンビ( 'Z')状態のプロセスが含まれています。