O que é um processo parado no linux?

12

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)?

Jon
fonte

Respostas:

15

Isso significa que o processo recebeu um STOPsinal e não fará muito até receber um CONTsinal, nem mesmo terminar.

A fonte mais comum de STOPsinais é o usuário bater ^zenquanto o processo está em primeiro plano, e a maneira mais comum de enviar um CONTdepois é digitar fgou bgcontinuar o processo em primeiro plano e em segundo plano, respectivamente.

Outra maneira de enviar STOPpara um processo é kill -STOP $pid. Da mesma forma, CONTpode ser enviado para um processo com kill -CONT $pid.

Como você enviou TERMsinais para os processos, presumo que você queira que eles terminem. Para que isso aconteça, os processos devem receber CONTsinais. Você pode enviá-los digitando kill -CONT 8754 8767em uma janela do terminal.

Eroen
fonte
O envio de um sinal CONT permitiria a execução do script até sua conclusão? Ou faria com que o script fosse finalizado imediatamente?
21412 Jon
O processo continua o que estava fazendo (antes de STOP) ao receber um CONT. Se você enviou um TERM (por kill $pidexemplo) enquanto estava parado, no entanto, ele (tardiamente) responderá a esse TERM e será encerrado.
Eroen
Hmm, então eu enviei um TERM executando, o kill 8754que 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 STOP kill -STOP 8754, isso também poderia acontecer se fosse enviado um sinal TERM?
21412 Jon
Um processo parado não será finalizado devido a um TERMsinal até que continue. Ele terminará imediatamente se receber um KILLsinal, 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 recebidos TERM.
Eroen
4

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 o SIGCONTsinal.

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.

Estados do processo do kernel Linux: Pronto, Em execução, Parado, Suspenso, Rastreado, Zumbi

Créditos da imagem: polytechnique.fr


Cada processo no kernel do Linux é representado por uma task_structestrutura de dados e cada taskvetor consiste em uma matriz de ponteiros para todos task_struct. que descreve um processo ou tarefa no sistema (ou seja unrunnable, runnableou stopped). Consulte: Processos e estruturas de dados do Linux ) para obter mais detalhes.

Veja também: O kernel do Linux: Gerenciamento de processos

kenorb
fonte
@ Obrigado Obrigado pelo relatório, eu o corrigi.
kenorb 24/02