O processo interrompido não continua funcionando após o envio do SIGCONT

0

Eu inicio cat no terminal:

$ cat

Em seguida, no segundo terminal, envio o sinal de parada:

$ kill -SIGSTOP $(pgrep cat)

E isso funciona - cat está parado. Agora quero acordar esse processo de cat enviando SIGCONT :

$ kill -SIGCONT $(pgrep cat)

E nada acontece. No entanto, se eu usar fg no primeiro shell, então cat será ativado. Por que SIGCONT não continua cat execução?

    
por scdmb 26.04.2014 / 16:19

1 resposta

2

Atingir "ctrl-Z" no shell suspende o processo de primeiro plano atual, enviando-lhe um sinal STOP . Isso (eu acredito) também resulta na entrada padrão do processo sendo desanexada do shell - agora é um processo em segundo plano.

O comando bg envia um sinal CONTINUE para o comando, mas não reconecta sua entrada padrão ao shell. Como o gato está aguardando a entrada padrão, ele permanece parado. Como você mencionou, o comando fg de fato conecta a entrada padrão ao shell.

Quando você envia um sinal STOP para o seu processo, o shell é notificado por um sinal CHILD e o coloca em segundo plano e acontece a mesma coisa.

Você pode ver a diferença quando clica em "ctrl-Z":

[1]  + 8336 suspended  cat

E quando você envia um sinal STOP manualmente:

[1]  + 8336 suspended (signal)  cat
    
por 26.04.2014 / 17:43