[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: zombie



2007/1/15, Felipe Augusto van de Wiel (faw) <felipe@cathedrallabs.org>:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 01/14/2007 06:32 PM, sluiz wrote:
> Estou precisando criar um processo zombei, ou seja, preciso matar o
> processo pai e manter o filho funcionando.

        Hmmm, isso não é um processo zombie.


> Toda vez que utilizo kill -9 $PPID mato o processo atual também.
> Já tentei executar o script filho com & no final, já
> tentei nohup, mas não adianta esse filho tá muito ligado ao pai.
> Aguém tem ulguma idéi para separar esse dois?

        Não é beeeeem assim que funciona. A idéia de pai e filho
está ligada à cadeia de execução, um dos exemplos tradicionais é
a execução da chamada fork() em um programa C.

        Você pode chegar próximo disso via sheel (fazer pai e
filho), mas pra criar um processo zombie a história é outra.

Vcs não criam um processo zombie, um processo fica zombie - quase
todos do seu micro são candidatos a ficar zombie... ainda bem que a
grande maioria não fica muito tempo :-)

Processos zombie são so que não morrem, mas também não estão
mais em estado de interação ou seja, eles estão apenas na pilha
de processos consumindo recursos (ou, criando oportunidade para
algum tipo de ataque ou DoS).

Aqui eu discordo. O processo zombie já morreu. Eu já expliquei isso
outras vezes aqui, mas em resumo:
Qdo vc faz um fork, o pai-filho mantém um grau de parentesco. É
possível que o filho mande 'sinais' para o pai (não lembro se
vice-versa é verdade). O pai precisa implementar a rotina de
tratamento de sinais, pq mesmo se o filho não manda nada, quando ele
morre ele SEMPRE sinaliza para o pai. Entre a 'hora da morte' do filho
e a recepção e tratamento do sinal pelo pai, o processo fica zombie.

Façam o teste:
abra um shell, que vai servir p/ monitorar os processos com um 'ps f'
abra um outro shell, e dentro dele rode alguma coisa (pode ser até
outro shell) - esse vai ser o filho. Agora, volte no outro terminal e
rode 'kill -SIGSTOP <pid_do_pai>'; volte ao 2o. shell e encerre o
processo filho. Pronto! Vc está com um processo zombie até dar o 'kill
-SIGCONT <pid_do_pai>'

Depois que o processo virou zombie, ele já morreu - só resta o corpo
ainda... :-)


--
Marcos



Reply to: