Я пытался убить все мои фоновые задания, представленные ранее под KUbuntu
kill -9 $(jobs -p)
Хотя эта команда сразу дала сообщение как
[1] убил myjob1
[2] убил myjob2
Я все еще вижу, как их процессы зависают на выходе top, а использование процессора и памяти не изменяется на выходе uptime и свободно.
Так что, наверное, я не убил их должным образом. Может кто-нибудь объяснить, что со мной происходит и что мне делать?
Я обнаружил, что сверху, если набрать k и ввести PID, я могу убить процессы один за другим. ТАК это отличается от команды kill?
Я также нашел где-то в Интернете http://www.ruhr.de/home/smallo/award.html о том, что не рекомендуется убивать -9
Бесполезное использование Kill -9 формы письма
(Цитата мерзость)
Нет нет нет. Не используйте kill -9.
Это не дает процессу возможность чисто:
1) отключить разъемы
2) очистить временные файлы
3) сообщить своим детям, что он уходит
4) сбросить свои терминальные характеристики
и так далее, и так далее, и так далее.
Как правило, отправьте 15 и подождите секунду или две, и если это не сработает, отправьте 2, а если это не сработает, отправьте 1. Если это не сработает, УДАЛИТЕ ДВОЙНОЙ, потому что программа плохо себя ведет!
Не используйте kill -9. Не берите комбайн, чтобы убрать цветочный горшок.
Это правда? Что означает «отправить 15», «отправить 2» и «отправить 1»? Они сами команды или «убить -15 PID», «убить -2 PID» и «убить -1 PID»?
Спасибо и всего наилучшего!
Ответы:
Возможно, ваш процесс мертв, но он все еще отображается в записи таблицы процессов, потому что это «процесс зомби». Когда дочерний процесс завершается и полностью исчезает (за исключением записи в таблице процессов) и родитель не может получить статус завершения (через любую из функций ожидания), это называется зомби ... Убийство (через сигнал) работать, потому что это уже прекращено. Что вам нужно сделать, это выяснить его родительский процесс и уничтожить его одним очистителем, таким образом, не используя kill - 9
вот два простых шага, чтобы убить зомби ...
источник
-f
флаг для ps, чтобы увидеть родительские процессы.см.
man kill
для определения различных доступных сигналов, но да.Они информируют процесс о том, что пользователь «завершил» процесс, хотя указывают на несколько иные причины. SIGTERM можно интерпретировать как «завершить текущую задачу, но затем завершиться; не запускать другую», SIGINT означает «отказаться от того, что вы «Вы делаете и выходите», SIGHUP просто означает, что никто больше не слушает (серверный процесс может законно реагировать на SIGHUP, прекратив вывод на консоль и продолжая работать).
источник
Это означает использование
kill -15 PID
(или другое число) вместоkill -9 PID
. Числа эквивалентны различным сигналам Unix .источник
Это означает «убить -1» или «убить -15» вместо того, чтобы набирать «убивать -9». Kill -9 - это хардкорная пуля в голове любого запущенного процесса, убивающая его в грязном состоянии, что может вызвать утечку памяти, бла-бла.
Если вы вводите команду kill -9, и она не работает, тогда я постараюсь убедиться, что процесс не запускается, и что у вас есть разрешение на его уничтожение.
источник
Сигнал 9 SIGKILL. Отправка SIGKILL просит операционную систему немедленно убить процесс, без вопросов. Процесс не уведомлен заранее и не имеет возможности убирать за собой.
Сигнал 15 является SIGTERM. При отправке SIGTERM просит ОС попросить процесс отключиться.
SIGKILL может быть проигнорирован, если ОС считает, что процесс выполняет IO, или если это Zombie (дочерний процесс, родительский процесс которого после него не очистился).
Приложение может игнорировать SIGTERM, но не рекомендуется, чтобы приложения делали это, поскольку операционные системы отправляют SIGTERM во время завершения работы, а вскоре SIGKILL, если программа все еще работает.
Примечание. Командная строка
kill
всегда запрашивает у ОС отправку сигнала приложению, что она может делать, а может и не делать, в зависимости от того, кому принадлежит процесс и т. Д.источник