Por que o PGID do meu filho não processa o PID do pai?

10

Por isso, continuo lendo em todos os lugares que esse comando deve finalizar todos os processos filhos do processo pai:

kill -- -$$

Usar um ID negativo com o comando kill faz referência a um PGID e, dos exemplos que vi, parece que o PGID dos processos filhos deve ser o PID do pai, mas não é o caso do meu sistema.

No meu sistema, o PGID do filho é o mesmo que o PGID do script pai que é o bash.

O que está acontecendo aqui? Os exemplos estavam errados ou meu sistema está configurado de forma diferente?

O que eu preciso alcançar é terminar os processos filhos sem terminar o pai, então eu não quero enviar um sinal de morte para o PGID em que o pai está.

    
por TCZ8 25.06.2014 / 22:12

1 resposta

9

Acho que você está falando do PGID, que significa ID do grupo de processos .

Quando um processo é bifurcado, ele herda seu PGID de seu pai. O PGID muda quando um processo se torna um líder do grupo de processos , então seu PGID é copiado de seu PID. A partir de então, o novo filho processa o spawns e seus descendentes, herdam esse PGID (a menos que iniciem novos grupos de processos).

Em um shell com controle de tarefa, como a maioria dos shells interativos, cada trabalho é colocado em seu próprio grupo de processos. Se você executar um script de shell, o processo do shell executando o script será o líder do grupo, e o PGID será igual ao seu PID.

Em um shell sem controle de tarefa, como a maioria dos shells usados para executar scripts, os comandos são executados no grupo de processos do shell.

A sintaxe kill -- -N mata todos os processos no grupo com PGID = N. Você não pode usá-lo com um PID arbitrário, apenas o PID de um líder do grupo de processos, já que esse é o PGID. Isto é essencialmente como o shell é

kill %jobid
A sintaxe

funciona - traduz internamente %jobid para o PGID do trabalho e envia o sinal para esse PGID.

Não existe uma maneira simples de executar um script em seu próprio grupo de processos a partir de outro script de shell. Veja Como definir o grupo de processos de um script de shell para algumas sugestões, no entanto.

    
por 25.06.2014 / 22:41