A chamada do sistema kill()
e o comando kill
shell podem ser usados para eliminar processos ou grupos de processos. De qualquer forma, não há "cascata", nunca.
-
Quando o comando
kill()
system call oukill
shell recebe um número inteiro positivo, isso representa um processo. O sinal é enviado para esse processo e não para outros. -
Quando a chamada de sistema
kill()
recebe um inteiro negativo ou o comandokill
shell recebe um identificador de trabalho que começa com%
(como%1
ou%2
), o sinal é enviado simultaneamente a todos os membros de um grupo de processos . Grupos de processos são um recurso de controle de tarefas. No uso de shell interativo, cada pipeline de shell (comosed s/foo/bar/ | cat -n | gzip
) é composto de 1 ou mais processos que fazem parte do mesmo grupo de processos.
(Para a chamada do sistema, há alguns casos extras: -1
envia para cada processo, 0
envia para você).
Nada disso significa que, quando um processo morre, outro processo também não morre por algum outro motivo. Por exemplo:
- Um processo que gera um filho pode interceptar um sinal de término e passá-lo para a criança que criou antes de sair, como forma de limpar o próprio.
- Quando um processo anterior em um pipeline de shell, como o acima, morre (por qualquer motivo), os processos posteriores no pipeline de shell geralmente terminam prontamente, porque eles não estão mais recebendo nenhuma entrada.
O kernel não é responsável por tais conseqüências "adicionais" e elas dependem de como o software envolvido se comporta.