System information as of Fri Mar 9 19:40:01 KST 2012
System load: 0.59 Processes: 167
Usage of /home: 23.0% of 11.00GB Users logged in: 1
Swap usage: 0% IP address for eth1: 192.168.0.1
=> There is 1 zombie process.
Graph this data and manage this system at https://landscape.canonical.com/
10 packages can be updated.
4 updates are security updates.
Last login: Fri Mar 9 10:23:48 2012
a@SERVER:~$ ps auxwww | grep 'Z'
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
usera 13572 0.0 0.0 7628 992 pts/2 S+ 19:40 0:00 grep --color=auto Z
a@SERVER:~$
Como encontrar esse processo zumbi?
ps auxwww | grep 'Z'
comando deveria ter mostrado um processo em umZ
estado. O ditado "informações do sistema"=> There is 1 zombie process.
parece ser um bug. Ou isso, ou faltam informações na pergunta.Respostas:
Para matar um zumbi (processo), você deve matar o processo pai (como zumbis de verdade!), Mas a questão era como encontrá-lo.
Encontre o zumbi (a pergunta respondeu a esta parte):
O que você obtém é Zombies e qualquer outra coisa com um Z, então você também receberá o grep:
Encontre o pai do zumbi:
Darei à você:
Nesse caso, você não deseja matar esse processo pai e deve estar muito feliz com um zumbi, mas matar o processo pai imediato 5145 deve se livrar dele.
Recursos adicionais no askubuntu:
fonte
ps wauxf
faz a mesma coisaEmbora essa pergunta seja antiga, achei que todos mereciam uma resposta mais confiável:
Isso emitirá duas colunas delimitadas por espaços em branco, a primeira das quais é um PID e a segunda é o seu estado.
Acho que nem o GNU
ps
fornece uma maneira de filtrar diretamente por estado, mas você pode fazer isso de maneira confiável comawk
Agora você tem uma lista de PIDs que são zumbis. Como você conhece o estado, não é mais necessário exibi-lo, para que possa ser filtrado.
Fornecendo uma lista delimitada por nova linha de PIDs de zumbis.
Agora você pode operar nessa lista com um simples loop de shell
ps
é uma ferramenta poderosa e você não precisa fazer nada complicado para extrair informações do processo.(Significado dos diferentes estados do processo aqui - https://unix.stackexchange.com/a/18477/121634 )
fonte
awk
também é uma ferramenta poderosa que não apenas divide o texto, mas também pode combiná-lo. +1 ... os outros usavamgrep
onde é desnecessário e impreciso.ps -p "$pid" -opid=,ppid=
ppid=
à lista de opções, portanto, não é necessário usar um comando separado para obter o ppid.ps aux | awk '{ print $8 " " $2 }' | grep -w Z
De: http://www.cyberciti.biz/tips/killing-zombie-process.html
Dos comentários, um melhorado:
Cuidado, porém: este também mata os processos.
fonte
ps axo pid=,stat= | awk '$2~/Z/ {print $1}'
vez disso).Menos é mais:
É como, dê-me uma floresta (árvore) de todos os processos dos usuários em um formato orientado ao usuário com largura ilimitada em qualquer tty e mostre-a na metade da tela acima, onde corresponde ao caso em que a 8a coluna contém um Z e por que não destacar toda a linha.
O formato orientado ao usuário parece significar:
USER, PID, %CPU, %MEM, VSZ, RSS, TTY, STAT, START, TIME, COMMAND
portanto, o status Zombie será exibido na 8ª coluna.Você pode inserir um
N
antes dop
se quiser números de linha e umJ
se quiser um asterisco na partida. Infelizmente, se vocêG
não destacar a linha que o asterisco não mostrará, issoJ
cria espaço para ele.Você acaba recebendo algo parecido com:
Você pode acompanhar isso com (e ele detectará se o seu terminal gosta de -U Unicode ou -A Ascii):
OU apenas, você sabe, use a seta
less
para cima para seguir a árvore / floresta através da hierarquia; que é o que eu estava recomendando com a abordagem "Menos é mais".fonte
Eu sugiro a você este comando:
fonte
aux
e a retirada de cadeias de caracteres são desnecessariamente confiáveis quando você pode usar-o
e solicitar exatamente o que deseja. Use emps ax -o pid=,stat= | awk '$2 ~ "[Zz]" { printf("%s, PID = %d\n", $2, $1); }'
vez disso.Para listar os zumbis do processo, tente este comando:
Pode ser necessário alterar
$7
dependendo do seu sistema operacional.Isso também retornará a lista de seus IDs de processo pai (
PPID
).Para tentar matar os zumbis (depois de testar o comando acima), tente:
Para identificar seus pais, tente com
pstree
, como:fonte
j
formato para isso é desnecessariamente complicado. Use-o
para selecionar o que você deseja.ps j
não imprime todos os processos no sistema. Ele lista apenas os procs do usuário atual (no estilo de trabalhos do BSD), para que ele perca os processos zumbis.