출력에서 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') 상태의 프로세스가 포함됩니다.