O processo já está morto no momento. Não faz sentido matá-lo novamente. Ele ainda é gravado na tabela de processos para permitir que o pai / mãe ative seu status.
Note que todos os processos se tornam zumbis depois de serem mortos. Você simplesmente não os vê porque a maioria dos processos parentais limpa seus filhos muito rapidamente. Você pode querer enviar um relatório de bug se um software não limpar seus zumbis e eles só forem limpos por init quando o processo pai sair.
Sua pergunta adicional é por que SIGKILL
não o remove da tabela de processos. Você deve primeiro nos dizer por que deveria. Não tenho conhecimento de nenhum motivo único para permitir que o usuário remova um processo defunto da tabela de processos. No design do sistema operacional, você deve sempre ter um bom motivo para fazer algo antes de perguntar por que não fazê-lo . Você está solicitando um recurso sem nenhum caso de uso real.
Além da falta de propósito, isso teria consequências ruins. O pai chama wait()
e / ou waitpid()
para saber o status dos filhos que saíram. O resultado da chamada é consistente, quer seja chamado antes de o processo se tornar defunto , antes de você emitir o SIGKILL
, ou depois disso.
Se o kernel não mantivesse os registros (ou seja, o processo seria removido da tabela de processos), o comportamento teria que ser inconsistente e o pai teria que esperar a inconsistência e enfrentá-lo sem motivo válido. Em sistemas que reutilizariam antigos valores de pid , não manter os registros poderia resultar em problemas muito mais graves, como um software matando um processo totalmente diferente por acidente.
Veja também: link