Forçar a obtenção de processos java zombie no OS X 10.7

5

Tenho o CrashPlan em execução no meu MacBook Pro e ficou um pouco confuso. Essencialmente, causou uma bifurcação. Felizmente, eu tinha uma janela do Terminal aberta e era capaz de executar este comando:

sudo launchctl unload /Library/LaunchDaemons/com.crashplan.engine.plist

Assim, a constante re-spawning parou. Mas, eu ainda tenho mais de 900 processos Java que não estão fazendo nada além de me empurrar contra a minha contagem máxima de processos. Eu preferiria não reiniciar meu computador, pois eu tenho muitos arquivos de códigos abertos, páginas da web, etc. Existe uma maneira fácil de forçar o sistema a colher esses zumbis? Eu mataria o processo pai, mas todos eles foram iniciados pelo launchd aka PID 1. Nesse ponto, seria melhor reiniciar.

Eu tentei:

sudo kill -9 <PID>
sudo kill -9 java
sudo killall -9 java    

Existe uma maneira de matar os zumbis de uma vez por todas sem ter que matar o launchd para fazer isso? Ou vou ter que reiniciar para sobreviver a esse apocalipse zumbi?

    
por Mechcozmo 05.01.2012 / 03:29

2 respostas

4

Um zumbi já está morto. Não pense em um processo, pense nele apenas como um processo. Não há nada para matar, então mate -9 funciona assim como mata -1, significando nada.

Eles estão esperando que os pais os colham. Se o pai não o fizer por algum motivo, e o pai não disser ao kernel para não gerá-lo, ele será deixado como zumbi.

No UNIX tradicional, o pid 1 é init, que sempre colhe filhos. Eu acho que o launchd é codificado da mesma forma. Se você tem zumbis com PPID como 1, você está praticamente sem opções naquele momento, além de reinicializar.

    
por 05.01.2012 / 20:53
2

Não há como fazer isso, infelizmente. Os processos zumbis geralmente são benignos porque seus pais os colhem eventualmente e não consomem recursos ... mas contribuem para a contagem máxima de processos que seu sistema permitirá (acho que isso depende da quantidade de RAM instalada no computador , mas não consigo encontrar documentação para isso no Lion). As instâncias da JVM eram de propriedade de launchd (PID 1 no Mac) e não há maneira segura de matar o launchd e tê-lo reiniciado sem também matar todos os filhos do launchd. Qual seria tudo menos o kernel.

Isso pode se aplicar a qualquer LaunchAgent descontrolado; os processos seriam todos filhos de launchd, e isso traria os mesmos problemas que eu tinha para jogar. Eu não acredito que toda instância da JVM lançada por todo código Java seja gerada pelo launchd, mas isso acontece, pois o CrashPlan usa o Java e, por isso, tive problemas com meu sistema.

Acho que a lição a ser aprendida aqui é: não bifurque a bomba e mantenha uma janela do Terminal à mão. Uma reinicialização esclareceu os zumbis, então tudo está bem.

    
por 05.01.2012 / 19:39