Na saída de ps (1) em sistemas semelhantes ao OS X, o que significam os processos listados entre parênteses e como os mato?

1
username@yosemite ~ % ps wwwaux | grep java
username        48111   0.0  0.0        0      0   ??  ?E   11:54AM   0:00.00 (java)
username        91673   0.0  0.0  2432772    508 s006  R+    3:19PM   0:00.00 grep java
username        90809   0.0  0.0        0      0   ??  ?E   12:47PM   0:00.00 (java)

De vez em quando, recebo uma JVM suspensa assim. O que as listagens do processo (java) significam? Como eu mato eles? kill -9 48111 não faz nada e AFAICT as listagens ficam lá até eu reiniciar.

    
por javanix 10.08.2015 / 22:23

1 resposta

1

Em caso de dúvida, consulte a página man:)

$ man ps
/parenth

When printing using the command keyword, a process that has exited and
has a parent that has not yet waited for the process (in other words,
a zombie) is listed as ''<defunct>'', and a process which is blocked
while trying to exit is listed as ''<exiting>''.  If the arguments
cannot be located (usually because it has not been set, as is the case
of system processes and/or kernel threads) the command name is printed
within square brackets.  The process can change the arguments shown
with setproctitle(3).  Otherwise, ps makes an educated guess as to the
file name and arguments given when the process was created by
examining memory or the swap area.  The method is inherently somewhat
unreliable and in any event a process is entitled to destroy this
information.  The ucomm (accounting) keyword can, however, be depended
on. If the arguments are unavailable or do not agree with the ucomm
keyword, the value for the ucomm keyword is appended to the arguments
in parentheses.

Além disso:

KEYWORDS
  The following is a complete list of the available keywords and their meanings.
  Several of them have aliases (keywords which are synonyms).
  ...
  ucomm      name to be used for accounting

Parece que esses são processos zumbis e, em vez de apenas retornar <defunct> como o nome do processo, está retornando o que foi armazenado em algum tipo de registro contábil.

Quanto a matar esses processos, a reinicialização pode ser a melhor opção. Desde que eles perderam o seu PPID original e se tornam filhos de PPID 1 (launchd). Você pode tentar enviar um sinal HUP para launchd, mas não tente enviar um sinal SIGKILL ou SIGTERM para ele, ou você irá travar o seu sistema.

Você pode verificar o PPID dos processos zumbis usando ps -ef .

Nota : ter alguns processos zumbis não deve atrapalhar nada. O processo não está mais sendo executado, foi finalizado e não está usando nenhum recurso do sistema, além de uma entrada na tabela de processos.

    
por 10.08.2015 / 22:43