Muitos programas, como o sshd, criam arquivos .pid em / var / run / que contêm o ID do processo. Esses arquivos são confiáveis para determinar se um processo está em execução? Meu palpite é que esses arquivos são criados manualmente por um processo e, portanto, ainda permanecerão no sistema de arquivos se o programa travar.
11
A Jldupont está correta ao afirmar que os arquivos .pid não são confiáveis para determinar se um processo está em execução, pois o arquivo não pode ser removido no caso de uma falha.
Além das condições de corrida, geralmente uso o pgrep quando preciso saber se um processo está em execução. Eu poderia então fazer referência cruzada da saída com o (s) arquivo (s) .pid se considerasse necessário.
fonte
Um arquivo contendo uma identificação de processo não é confiável para determinar se um processo está sendo executado ou não. É apenas uma fonte confiável, para descobrir o último ID de processo fornecido para o processo.
Quando você tem o ID do processo, é necessário fazer uma verificação adicional, se o processo estiver realmente em execução.
Aqui está um exemplo:
O pgrep é um bom comando, mas você terá problemas quando tiver várias instâncias em execução. Por exemplo, quando você tem um sshd regular em execução na porta TCP / 22 e outro sshd em execução na porta TCP / 2222, o pgrep fornecerá dois IDs de processo ao procurar por sshd ... quando o sshd normal tiver seu pid em / var /run/sshd.pid e o outro pode ter seu pid em /var/run/sshd-other.pid, você pode diferenciar claramente os processos.
Eu não recomendo usar apenas ps , canalizar através de um ou vários pipes com grep e grep -v tentando filtrar todas as outras coisas que não lhe interessam ... é um pouco como usar
para descobrir, se um arquivo sair.
fonte
Não é confiável simplesmente verificar a existência de um processo com o mesmo pid contido no arquivo.
Mas muitas implementações de pidfile também bloqueiam o pidfile, de modo que, se o processo morrer, o bloqueio desaparecerá. Desde que o mecanismo de bloqueio seja confiável, verificar se o arquivo ainda está bloqueado é um mecanismo relativamente confiável para determinar se o processo original ainda está em execução.
fonte
Jldupont está correto.
No entanto, você pode enviar ao processo um sinal 0 (kill -s 0 pid) para ver se o processo ainda está ativo (supondo que você tenha autoridade para enviar esse sinal - em geral, apenas o proprietário de um processo pode enviar é um sinal).
fonte
Eu concordo com jschmier.
Em alguns sistemas, você não tem acesso ao pgrep. Nesse caso, você pode fazer
ps -aef | grep <pid>
para descobrir se o processo está realmente em execução.fonte