なぜpidofが機能しないのですか?

なぜpidofが機能しないのですか?

出力で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

pidofsrc/killall5.cin(を使って得た)のソースコードを確認すると、apt source sysvinit-utils599行に答えがあります。

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. */

おすすめ記事