Na saída de ps aux
, posso ver o processo muito bem:
# 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
Mas pidof
afirma não ser capaz de encontrar nada:
# pidof diff
# echo $?
1
Olhando para a página man, não há informações sobre o que fazer quando se perde um processo, o pidof tem. /proc/7787/exe
é um link simbólico para /usr/bin/diff
e /usr/bin/diff
ele próprio é um arquivo regular e um ELF. De acordo com a página do manual, isso deve corresponder.
Após alguma investigação com
strace
o , parece quepidof
também verifica o status dos processos. Meudiff
processo estava emD
estado a maior parte do tempo, o que significa que está esperando muito por E/S. Com esse conhecimento, eu corripidof
várias vezes (isso é dentro de ~ 3 segundos):De fato, retorna 'às vezes', parecendo confirmar a suspeita de que
pidof
apenas retornam processos que não estão emD
estado.Verificando o código fonte de
pidof
insrc/killall5.c
(obtido usandoapt source sysvinit-utils
), a resposta está na linha 599:No sysvinit 2.96 e posterior,
pidof -z
incluirá processos que estão em estado de E/S de disco ('D') ou zumbi ('Z').