Removendo o processo zumbi da tabela de processos

5

Alguém pode explicar quando o processo pai recebe o status de saída de um processo filho morto via wait , quem realmente realoca a memória do processo filho e a remove da tabela de processos?

    
por Gilles 29.06.2011 / 14:05

2 respostas

4

Manipular a tabela de processos e os mapeamentos de memória é sempre a tarefa do kernel. O kernel age quando algum processo faz uma chamada de sistema. Quando um processo é encerrado, todos os recursos que ele usa, incluindo a memória, exceto a entrada na tabela de processos, são excluídos - é o que a chamada do sistema _exit faz. Em seguida, quando o processo pai chamar wait ou waitpid , parte do trabalho dessa chamada de sistema é limpar a entrada da tabela de processo. O processo pai pode decidir chamar wait sempre que quiser (se o pai for init , ele chamará wait praticamente o tempo todo).

    
por 30.06.2011 / 19:29
3

O kernel assume que o processo pai está interessado em saber o resultado de qualquer processo filho que ele tenha bifurcado. Quando um processo filho termina, ele envia automaticamente um sinal SIGCHLD para o processo pai. Se o pai estiver ignorando explicitamente o sinal SIGCHLD , o filho será imediatamente limpo e removido completamente (e não se tornará um zumbi). Caso contrário, o filho se tornará um zumbi até que o pai chame uma das funções wait para recuperar o status de finalização do filho.

Se o status não for recuperado, a criança continuará sendo um zumbi. No entanto, se o processo pai sair antes do processo filho, o filho será adotado por init (processo 1), que coleta o status imediatamente, removendo efetivamente o processo zumbi.

    
por 29.06.2011 / 14:20