O / proc / PID ainda pode existir quando o PID não está em execução?

11

é possível que /proc/4587exista uma pasta como essa, mesmo que não exista um processo com o PID 4587?

David Dai
fonte
1
Você está se perguntando se a verificação de / proc / N é uma maneira segura / confiável de verificar se o PID N está em execução?
Andy Lester
Eu queria saber se, teoricamente, poderia haver resíduo em / proc após o término do processo.
David Dai

Respostas:

25

Se /procé apenas a procmontagem (e ninguém está fazendo truques com sobreposições), não, uma pasta baseada em pid existe apenas enquanto o processo correspondente existir em algum estado (inclusive como um zumbi). De fato, pouco antes de retornar uma entrada de diretório para uma identificação de processo, o kernel re-valida a existência do processo - assim, no instante em que uma entrada de diretório é retornada, o processo correspondente ainda está lá. O acesso a um diretório também começa pesquisando o processo correspondente. (Se os números das linhas mudarem, procure proc_pident_instantiatee proc_pident_lookup.)

Você pode encontrar problemas causados ​​pela listagem /proce uso dos resultados posteriormente (até alguns microssegundos depois): um processo pode estar em execução quando você listar /proce parar antes de agir sobre os resultados.

Stephen Kitt
fonte
3
E os processos que concluíram a execução, mas wait()não foram chamados?
el.pescado
2
Bom ponto @ el.pescado, uma verificação rápida indica que os processos zumbis ainda têm seu diretório. Vou atualizar minha resposta, obrigado!
Stephen Kitt
Basicamente, se psmostra o processo, seu /procdiretório deve existir.
Barmar 08/09
@Barmar “deve” de fato: psacessa /procpara encontrar as informações exibidas.
Stephen Kitt