Убить процесс в Linux

server01:/# ps -ax | grep java

Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html

 7342 pts/3    Z      0:00 [java] <defunct>

 7404 pts/3    S+     0:00 grep java


server01:/# kill 7342

server01:/# ps -ax | grep java

Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html

 7342 pts/3    Z      0:00 [java] <defunct>

 7406 pts/3    S+     0:00 grep java


server01:/# 

Выше я использую команду ps, чтобы узнать pid процесса java, который в приведенном выше случае равен 7342.

Затем я убил этот процесс с помощью команды kill. Но это не убито, потому что снова команда ps показывает процесс Java с pid 7342.

Должен ли я использовать какую-то еще команду, чтобы убить процесс, и почему kill не может убить процесс

Thanx

7 ответов

Решение

Linux поддерживает переключатели в стиле BSD на ps команда (без начального - ... тире / дефис). Если кто-то поставит Hypen, то версия GNU coreutils ps (тот, который является стандартным в основных дистрибутивах Linux) будет пытаться интерпретировать коммутаторы как SysV-совместимые. Это источник вашей ошибки.

Я бы порекомендовал использовать форму переключателей BSD и посмотреть -o возможность указать формат вывода, состоящий ТОЛЬКО из PID соответствующих процессов.

Также вы пытаетесь убить зомби. Как вы обнаружили, это бесполезное усилие. Зомби - это заполнитель процесса, который может быть мертвым. Он остается в таблице процессов, пока его родительский процесс не "пожнет" свой код выхода. Если родитель никогда не делает wait() системный вызов, то запись будет оставаться там до тех пор, пока родитель не будет убит, после чего зомби (и любые другие потерянные процессы) будут унаследованы init процесс. Нормальный init под Linux (или любой другой формой UNIX) периодически пожинаются все мертвые процессы (зомби).

Концептуально каждый процесс, который завершается в системе UNIX/Linux, тратит небольшое количество времени как "зомби"... то есть всегда должен быть период времени между завершением процесса и временем, когда какой-то другой процесс читает его выход значение (даже если только отказаться от него, как init делает).

Этот вопрос действительно должен идти на ServerFault

Пытаться

PS Aux

затем

убить -1 PID_NUMBER

попросить программу закрыть себя, если она не отвечает, вы можете принудительно закрыть ее

убить -9 PID_NUMBER

помните, что использование -9 для принудительного завершения программы завершится без запроса и сохранения чего-либо, проверьте: man kill для более подробной информации

kill -9 может быть использован в качестве крайней меры, чтобы гарантировать, что процесс умирает.....

kill -9 $(pgrep -f keyword),

Kill pid(s), которые искали по "KEYWORD";

Процесс указан как несуществующий. Это работа выполнена, и она сохраняется, потому что родительский процесс все еще там. Однако, если родительский компонент потерпел крах или был убит командой kill -9, родительский процесс отсутствует, поэтому процесс перестал работать до перезагрузки. Несуществующие (или зомби) процессы используют только минимальные ресурсы, поэтому вы можете их сохранить.

Решение: либо убить родителя, либо использовать kill -9 <pid>,

Процесс Java стал процессом зомби. Вы должны попробовать отправить SIGCHLD сигнал родительскому процессу через kill сказать родительскому процессу пожинать дочерний процесс зомби. В противном случае, как упоминалось @Martin, вы можете убить родителя или kill -9 процесс зомби.

kill $(pgrep [search pattern])

Посмотрите, работает ли это лучше. Вы должны быть либо пользователем root, либо владельцем процесса, чтобы убить процесс.

Другие вопросы по тегам