Terminal: executa o programa em segundo plano com identificador ou nome especificado

1

Como posso executar um programa ou um script e identificá-lo mais tarde para verificar se ele ainda está em execução?

Por exemplo: estou executando um script PHP em segundo plano, que roda cerca de 10 horas (buscando muitos dados de diferentes APIs, etc.). Quando eu corro top , vejo que o processo php ainda está em execução. Mas e se eu estiver executando um segundo script PHP ao mesmo tempo? Como posso identificar qual é o primeiro e qual o segundo?

Eu preciso disso porque quero saber se o script ainda está em execução depois de algumas horas ou não ..

UPDATE

Estou usando o seguinte comando para identificar o processo do PHP e ver se ele ainda está em execução:

ps cax | grep "php$" | grep -o '^[ ]*[0-9]*'

Estou usando isso com PHP como $pid = exec(".."); e, em seguida, verificando se $pid é maior que 0. Se não, ele não está em execução, senão ele está em execução e eu tenho o ID do processo.

    
por beeef 27.08.2017 / 13:47

2 respostas

1

A resposta curta: você não pode.

A resposta média: Fora do processo pai que iniciou seu processo PHP, você não consegue identificar o processo com 100% de confiabilidade.

A resposta longa: Gerenciamento de Processos Bash

O que se resume é que top , ps e assim por diante não podem ser usados para identificar definitivamente processos iniciados por outro processo. Processos morrem inesperadamente. PIDs são reciclados. Os nomes dos processos podem ser alterados.

Você pode iniciar tudo a partir de um único daemon / processo de longa duração? Essa é a sua melhor aposta. No mínimo, o processo pai armazena o PID do processo PHP ... embora isso não seja infalível. Se você está disposto a viver com o risco de as coisas darem errado, leia essa página para descobrir maneiras de reduzir os riscos.

(O tom da página é bem rígido, mas o objetivo do site é correto. Se você não está executando um serviço de missão crítica ou algo do qual as pessoas dependem, você pode falsificar as coisas um pouco.)

Para responder a segunda parte, se você tem o que pensa ser o PID correto, então você pode determinar se ele ainda está sendo executado com

kill -0 <PID> && echo 'The process is still running!'
    
por 27.08.2017 / 14:08