Eu tenho um .pid
arquivo e preciso verificar se o processo está em execução. Até agora eu encontrei duas opções
kill -0 `cat something.pid`
que imprime um erro se o pid não estiver em execução. Eu sei que isso pode ser redirecionado /dev/null
, mas isso me faz pensar que essa não é a melhor solução.
A segunda solução seria usar ps
, que também imprime no STDOUT
ps -ef `cat something.pid`
É normal redirecionar a saída /dev/null
e usar apenas o código de status retornado ou é um sinal de que estou fazendo algo errado e preciso de um comando diferente?
kill -0
como compatível com o padrão (POSIX).Respostas:
para a maioria das distribuições linux que enumeram o / proc / {pid} é uma boa maneira de obter informações sobre os processos em execução e, geralmente, como os comandos do espaço do usuário como "ps" estão se comunicando com o kernel. Então, por exemplo, você pode fazer;
Editar: você deve verificar se o kpid está definido, mas isso é mais útil, pois retornará "não existe" para $ {kpid}
fonte
${kpid}
existeComo Anders observou, você deve usar
kill -0
para conformidade com o POSIX.Nos sistemas Linux, você também pode verificar a existência de um arquivo no sistema de arquivos / proc, por exemplo,
fonte
Se isso estiver em um script (que eu assumo que seja o caso de você estar preocupado com a impressão em stdout), o seguinte seria como você poderia fazê-lo:
Ele
ps -p
procura um processo com o pid especificado em something.pid (a$()
sintaxe é uma versão ligeiramente mais recente do backtick. O backtick precisa escapar em determinadas circunstâncias que o novo formulário não faz). O2>&1
redirecionador stderr também para esse comando.Se o
ps -p
comando não encontrar o processo com esse PID, ele sairá com um erro> 0 e, portanto,else
será executado. Caso contrário, akill
declaração. Você pode negar o acima, se desejar, fazendo:Espero que responda sua pergunta. Obviamente, tenha cuidado e teste muito ao usar comandos perigosos, como
kill
.fonte
Aqui estão algumas opções:
/etc/init.d/
) e se estiver usando a distribuição baseada no Debian, é melhor usarstart-stop-daemon
: Você deve obter o código de saída 0 se estiver em execução.procps
pacote:fonte
Se você possui um arquivo pid, pode usar o pgrep para verificar se o processo está em execução:
fonte