Então, eu tinha alguns scripts PHP em execução na linha de comando e queria interrompê-los.
Eu corri
$ ps aux | grep php
$ sudo kill 8754
$ sudo kill 8767
E então correu
$ ps aux | grep php
novamente para verificar se os processos foram encerrados, mas obteve esse tipo de saída:
jon 8754 0.4 53.5 3044256 2205204 ? T 10:34 0:15 php awesome_script.php
jon 8767 0.4 53.5 3044256 2205204 ? T 10:34 0:15 php awesome_script.php
jon 12275 0.0 0.0 4156 892 pts/1 S+ 11:27 0:00 grep --color=auto php
Eu olhei para cima o que o T significava na coluna estado e descobriu que ele significa parado, mas eu não entendo o que isso significa o processo está fazendo.
Sei que você pode criar seu próprio tratamento de sinais em PHP, mas ainda não o fiz. Portanto, quando o PHP recebe um sinal SIGTERM, o que ele faz?
O que um processo parado está fazendo (se houver)?
fonte
kill $pid
exemplo) enquanto estava parado, no entanto, ele (tardiamente) responderá a esse TERM e será encerrado.kill 8754
que deve fazer com que o processo acabe, certo? Você sabe em que estado um processo estaria enquanto estava terminando? Dado que o processo entrou no estado STOP, como se tivesse recebido um sinal STOPkill -STOP 8754
, isso também poderia acontecer se fosse enviado um sinal TERM?TERM
sinal até que continue. Ele terminará imediatamente se receber umKILL
sinal, mesmo quando parado. Presumo que um processo estará no estado de execução quando terminar. Não estou muito familiarizado com o PHP e não sei como saber por que um processo foi interrompido, desculpe. Geralmente, porém, os processos não param, mas terminam quando são recebidosTERM
.O processo parado no Linux / Unix é um processo / tarefa que recebeu o sinal de suspensão (
SIGSTOP
/SIGTSTP
) que informa ao kernel para não executar nenhum processamento nele, pois foi interrompido, e só pode retomar sua execução se receber oSIGCONT
sinal.O processo basicamente parado aguarda um sinal de continuação do kernel, da mesma forma que o processo suspenso aguarda uma condição de ativação do kernel.
Créditos da imagem: polytechnique.fr
Cada processo no kernel do Linux é representado por uma
task_struct
estrutura de dados e cadatask
vetor consiste em uma matriz de ponteiros para todostask_struct
. que descreve um processo ou tarefa no sistema (ou sejaunrunnable
,runnable
oustopped
). Consulte: Processos e estruturas de dados do Linux ) para obter mais detalhes.Veja também: O kernel do Linux: Gerenciamento de processos
fonte