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:~$
Как найти этот процесс зомби?
ps auxwww | grep 'Z'
команда должна была показать процесс вZ
состоянии. Поговорка «системная информация»=> There is 1 zombie process.
кажется ошибкой. Либо так, либо в вопросе отсутствует информация.Ответы:
Чтобы убить зомби (процесс), вы должны убить его родительский процесс (как настоящие зомби!), Но вопрос был в том, как его найти.
Найди зомби (на вопрос ответила эта часть):
То, что вы получите, это Zombies и все остальное с Z в нем, так что вы также получите grep:
Найдите родителя зомби:
Дам тебе:
В этом случае вы не хотите убивать этот родительский процесс, и вы должны быть вполне довольны одним зомби, но уничтожение непосредственного родительского процесса 5145 должно от него избавиться.
Дополнительные ресурсы по Askubuntu:
источник
ps wauxf
делает то же самоеХотя этот вопрос старый, я думал, что все заслуживают более надежного ответа:
Это создаст два столбца, разделенных пробелами, первый из которых - PID, а второй - его состояние.
Я не думаю, что даже GNU
ps
предоставляет способ фильтрации по состоянию напрямую, но вы можете надежно сделать это сawk
Теперь у вас есть список PID, которые являются зомби. Поскольку вы знаете состояние, его больше не нужно отображать, чтобы его можно было отфильтровать.
Предоставление списка разделенных новой строкой PID зомби.
Теперь вы можете работать с этим списком с помощью простого цикла оболочки
ps
это мощный инструмент, и вам не нужно делать ничего сложного, чтобы извлечь из него информацию о процессе.(Значение различных состояний процесса здесь - https://unix.stackexchange.com/a/18477/121634 )
источник
awk
это также мощный инструмент, который не только разделяет текст, но и может соответствовать ему. +1 ... остальные использовалиgrep
там, где это ненужно и неточно.ps -p "$pid" -opid=,ppid=
ppid=
в список опций, поэтому нет необходимости использовать отдельную команду для получения ppid.ps aux | awk '{ print $8 " " $2 }' | grep -w Z
От: http://www.cyberciti.biz/tips/killing-zombie-process.html
Из комментариев улучшенный:
Осторожно, хотя: этот также убивает процесс.
источник
ps axo pid=,stat= | awk '$2~/Z/ {print $1}'
вместо этого).Меньше значит больше, хотя:
Это как, дать мне лес (дерево) всех пользовательских процессов в ориентированном на пользователя формате с неограниченной шириной для любого tty и показать его мне на половине экрана выше, где это соответствует случаю, когда 8-й столбец содержит Z, и почему бы не выделить всю строку.
Похоже, что ориентированный на пользователя формат означает,
USER, PID, %CPU, %MEM, VSZ, RSS, TTY, STAT, START, TIME, COMMAND
что статус Зомби будет отображаться в 8-м столбце.Вы можете добавить
N
перед,p
если вы хотите, чтобы номера строк, и,J
если вы хотите звездочку в матче. К сожалению, если вы используете,G
чтобы не выделить строку, звездочка не будет отображаться, хотя иJ
создаст для нее место.В итоге вы получаете что-то похожее на:
Вы можете выполнить это с помощью (и он обнаружит, нравится ли вашему терминалу -U Unicode или -A Ascii):
ИЛИ просто, вы знаете, используйте стрелку вверх,
less
чтобы следовать этому дереву / лесу через иерархию; это то, что я рекомендовал с подходом «Меньше значит больше».источник
Я предлагаю вам эту команду:
источник
aux
и извлечение строк из этого без необходимости ненадежно, когда вы можете использовать-o
и запрашивать именно то, что вы хотите. Используйтеps ax -o pid=,stat= | awk '$2 ~ "[Zz]" { printf("%s, PID = %d\n", $2, $1); }'
вместо этого.Чтобы вывести список зомби процессов, попробуйте эту команду:
Возможно, вам придется изменить в
$7
зависимости от вашей операционной системы.Это также вернет список их идентификаторов родительского процесса (
PPID
).Чтобы попытаться убить зомби (после проверки вышеуказанной команды), попробуйте:
Чтобы определить их родителей, попробуйте
pstree
, например:источник
j
формата для этого излишне сложно. Используйте,-o
чтобы выбрать то, что вы хотите вместо этого.ps j
не печатает все процессы в системе. В нем перечислены только текущие пользовательские процедуры (в стиле заданий BSD), поэтому он может пропустить процессы зомби.