Зомби процессы linux посмотреть

How to find zombie process?

Surprising that no answer below actually says that there’s no zombie process in the system based on the above output. If there really was one, the ps auxwww | grep ‘Z’ command should have shown a process in a Z state. The «system information» saying => There is 1 zombie process. seems to be a bug. Either that, or there’s missing information in the question.

8 Answers 8

To kill a zombie (process) you have to kill its parent process (just like real zombies!), but the question was how to find it.

Find the zombie (The question answered this part):

What you get is Zombies and anything else with a Z in it, so you will also get the grep:

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 usera 93572 0.0 0.0 0 0 ?? Z 19:40 0:00 something 

Find the zombie’s parent:

init(1)---cnid_metad(1311)---cnid_dbd(5145) 

In this case you do not want to kill that parent process and you should be quite happy with one zombie, but killing the immediate parent process 5145 should get rid of it.

Additional resources on askubuntu:

The result you show in your answer is the the grep command itself, not the zombie process. It is the same mis-interpratation as Pablo made in his answer. The answer by Rinzwind below does actually look for the zombie process and list them. Another option could be to grep for «defunct»

This is a great answer! It is still valid today! I was able to find my zombie process and kill its parent process without any problems. Thank you!

Even though this question is old I thought everyone deserved a more reliable answer:

This will emit two whitespace-delimited columns, the first of which is a PID and the second of which is its state.

I don’t think even GNU ps provides a way to filter by state directly, but you can reliably do this with awk

You now have a list of PIDs which are zombies. Since you know the state it’s no longer necessary to display it, so that can be filtered out.

Giving a newline-delimited list of zombie PIDs.

You can now operate on this list with a simple shell loop

for pid in $(ps axo pid=,stat= | awk '$2~/^Z/ < print $1 >') ; do echo "$pid" # do something interesting here done 

ps is a powerful tool and you don’t need to do anything complicated to get process information out of it.

Читайте также:  Apt get on puppy linux

awk is also a powerful tool which doesn’t just split text but can also match it. +1 . the others used grep where it’s unnecessary and imprecise.

@chovy: It will depend, but generally involves killing or signalling the parent. Other answers here go in to that. From within the loop shown above you can find the parent pid like this: ps -p «$pid» -opid=,ppid=

if i will the parent won’t it kill all its child processes? I just want to kill the one zombie process. I know the ppid.

That’s like, give me a forest (tree) of all users’ processes in a user oriented format with unlimited width on any tty and show it to me at half a screen above where it matches the case that the 8th column contains a Z, and why not highlight the whole line.

User oriented format seems to mean: USER, PID, %CPU, %MEM, VSZ, RSS, TTY, STAT, START, TIME, COMMAND so the Zombie status will show up in the 8th column.

You can throw in an N before the p if you want line numbers, and a J if you want an asterisk at the match. Sadly if you use G to not highlight the line that asterisk will not show, though J creates space for it.

You end up getting something that looks like:

… root 2919 0.0 0.0 61432 5852 ? Ss Jan24 0:00 /usr/sbin/sshd -D root 12984 0.0 0.1 154796 15708 ? Ss 20:20 0:00 \_ sshd: lamblin [priv] lamblin 13084 0.0 0.0 154796 9764 ? S 20:20 0:00 \_ sshd: lamblin@pts/0 * lamblin 13086 0.0 0.0 13080 5056 pts/0 Z 20:20 0:00 \_ -bash lamblin 13085 0.0 0.0 13080 5056 pts/0 Ss 20:20 0:00 \_ -bash root 13159 0.0 0.0 111740 6276 pts/0 S 20:20 0:00 \_ su - nilbmal nilbmal 13161 0.2 0.0 13156 5004 pts/0 S 20:20 0:00 \_ -su nilbmal 13271 0.0 0.0 28152 3332 pts/0 R+ 20:20 0:00 \_ ps afuwwx nilbmal 13275 0.0 0.0 8404 848 pts/0 S+ 20:20 0:00 \_ less +u -Jp^(\S+\s+)Z.* … 

You could follow this up with (and it’ll detect if your terminal likes -U Unicode or -A Ascii):

OR just, you know, use the up-arrow in less to follow that tree/forest through the hierarchy; which is what I was recommending with the «Less is more» approach.

Источник

Ищем и убиваем zombie процессы

Apr 27, 2017 16:22 · 405 words · 2 minute read zombie defunct

Дочерний процесс в Unix-системе, завершивший своё выполнение, но ещё присутствующий в списке процессов операционной системы, чтобы дать родительскому процессу считать код завершения называют зомби (англ. zombie process, defunct process) — говорит нам Википедия.

Читайте также:  Scheduler in linux kernel

Подробнее ознакомиться с возникновением зомби-процессов и связанными с ними проблемами можно на той же Wiki, а мы разберемся как вычислить такие процессы и “убить” их!

Найти zombie -процесс можно несколькими способами, например:

Итак, находим zombie -процессы в нашей системе:

ps aux | grep -w Z git 2512 0.6 0.0 0 0 ? Z 08:31 1:08 [grunt] git 3574 0.0 0.0 0 0 ? Z кві13 0:48 [grunt] root 12523 0.0 0.0 112652 1036 pts/5 S+ 11:22 0:00 grep --color=auto -w Z git 13855 0.3 0.0 0 0 ? Z 07:07 0:47 [grunt] git 14896 0.0 0.0 0 0 ? Z кві13 0:48 [grunt] git 16213 0.0 0.0 0 0 ? Z кві03 0:44 [grunt] git 24146 0.5 0.0 0 0 ? Z 07:49 1:11 [grunt] git 26321 0.0 0.0 0 0 ? Z кві13 0:47 [grunt] git 29765 0.5 0.0 0 0 ? Z 08:10 1:09 [grunt] git 32440 0.0 0.0 0 0 ? Z кві13 0:47 [grunt] 

“Убить” найденные zombie-процессы просто так не получится. Самый правильный вариант — найти родительский процесс и убить или перезапустить его. (Еще может помочь перезагрузка сервера, но это точно не наш путь). Находим родительские процессы (их PID’ы в третьей колонке):

ps ajx | grep -w Z  2475 2512 2427 2427 ? -1 Z 1004 1:08 [grunt]  3557 3574 3509 3509 ? -1 Z 1004 0:48 [grunt] 12350 12671 12671 12330 pts/5 12671 S+ 0 0:00 grep --color=auto -w Z 13839 13855 13791 13791 ? -1 Z 1004 0:47 [grunt] 14869 14896 14820 14820 ? -1 Z 1004 0:48 [grunt] 16192 16213 16144 16144 ? -1 Z 1004 0:44 [grunt] 24120 24146 24071 24071 ? -1 Z 1004 1:11 [grunt] 26290 26321 26236 26236 ? -1 Z 1004 0:47 [grunt] 29725 29765 29645 29645 ? -1 Z 1004 1:09 [grunt] 32423 32440 32375 32375 ? -1 Z 1004 0:47 [grunt] 

При желании можно узнать больше подробностей о родительском процессе, например так:

ps auxww | grep 32375 root 12689 0.0 0.0 112648 1016 pts/5 S+ 11:23 0:00 grep --color=auto 32375 git 32375 0.0 0.0 211180 2892 ? Ss кві13 0:00 git-receive-pack /home/git/repo/ed.git 

Дальше этот процесс можем просто “убить”:

Источник

Зомби процессы в Linux

Пользователи устройств, функционирующих на операционной системе Linux, часто сталкиваются с таким распространенным явлением, как зомби процессы. На слух это название звучит весьма устрашающе, и с этим трудно поспорить, но на практике его бояться не стоит. Зомби процессы не способны нанести серьезный удар системе, хотя многие пользователи стараются удалять их во избежание каких-либо непредсказуемых проблем. Чтобы лучше понимать ситуацию, необходимо детальнее разобраться с тем, каким образом стандартный процесс превращается в зомби. Функция fork запускает дочерний процесс, который попадает под контроль родительского процесса. Если родительский процесс получает сигнал о завершении дочернего процесса, но при этом игнорирует его (в возможные причины сбоя вдаваться не станем), то этот процесс становится зомби. Стоит ли обращать на них своё внимание? Ответ: делать это совершенно не обязательно. Так как процесс уже был завершен, он перестал использовать системные ресурсы, но остался в системе. Самое разумное в этом случае – сделать вид, что его не существует, и продолжать работать с устройством, как ни в чем не бывало. Если пользователь попытается «уничтожить» зомби при помощи специальной команды «kill», у него ничего не выйдет, ведь этот процесс не выполняется. Это действие является бессмысленным, а потому процесс продолжит отображаться в системе. Чтобы полностью убрать зомби, необходимо уничтожить или перезапустить его родительский процесс. Если есть такое желание, обратитесь к инструкции ниже.

Читайте также:  Linux dns servers configuration

Как посмотреть зомби в операционной системе Linux

Это можно сделать при помощи утилиты ps: $ ps aux | grep defunct psКак обнаружить в системе «родителя»: $ ps -xal | grep defunct Ищем родителя После того, как нашли родителя можно удалить зомби. Это единственный способ уничтожения зомби процесса. Прямые команды не удалят их. Найдите в колонке идентификатор «родителя». В приведенном примере он находится в 4-м столбце под номером 761. С помощью команды «kill» пошлем сигнал завершения, чтобы зомби процесс прекратил своё существование в системе. $ kill -KILL 761 В вашем случае вместо 761 будет стоять другое значение. Его нужно правильно обнаружить. Данные рекомендации созданы для тех пользователей, которые любят порядок во всем. Но еще раз напоминаем: зомби в операционной системе Линукс безвредны, и являются абсолютно логичным следствием ошибки.

Источник

Зомби процессы Linux

Каждая программа, которая выполняется в Linux, — это системный процесс, у которого есть свой идентификатор. Каждый процесс может запускать дочерние процессы с помощью функции fork. Такие процессы остаются под контролем родительского процесса и не могут быть завершены без его ведома. Если один из дочерних процессов всё же завершился, а его родительский процесс не смог получить об этом информацию, то такой дочерний процесс становится зомби.

Зомби процессы Linux не выполняются и убить их нельзя, даже с помощью sigkill, они продолжают висеть в памяти, пока не будет завершён их родительский процесс.

Посмотреть такие процессы можно с помощью утилиты ps, здесь они отмечаются как defunct:

Если вы попытаетесь убить такой процесс с помощью сигнала KILL, то ничего не выйдет:

Чтобы его завершить, нужно найти «родителя» этого процесса. Для этого используйте команду:

Здесь идентификатор родительского процесса находится в четвёртой колонке (PPID). Теперь мы можем послать ему сигнал завершения, и такого процесса в системе больше не будет:

Для большего удобства вы можете использовать утилиты top или htop, но принцип их действия будет аналогичным, поэтому я не буду здесь его рассматривать. Теперь вы знаете, что делать, если в вашей системе появились зомби процессы Linux.

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Источник

Оцените статью
Adblock
detector