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

답변2

sysvinit 2.96 이상에는 pidof -z디스크 I/O('D') 또는 좀비('Z') 상태의 프로세스가 포함됩니다.

관련 정보