Как стать автором
Обновить

Комментарии 68

Так как все таки кошерно убивать процессы? Что посоветуете?
Про kill -9 и оставшиеся процессы не знал.
kill -15 pid
kill PID (-15 или -TERM используются по умолчанию). Если же этот вариант не помог, попробуйте убить процесс, посылая сигналы в порядке «силы», как описано в статье, учитывая, что процессу может потребоваться некоторое время для корректного завершения.
Все упирается в то какие сигналы приложение обрабатывает само, а какие отдает на обработку ОС. Единственный сигнал который приложение «не имеет право» перехватывать это -9 (KILL). И еще если не изменяет память ABR. В целом есть такая полезная штука man signal… Можно почитать на досуге. Но то как ведет себя программа при посылке сигнала определяет во многом приложение, а не то что написано где либо.
А killall разве не делает именно это? Вначале TERM, потом HUP и KILL?
Нет, программа killall убивает все процессы с данным именем, по умолчанию отправляя сигнал TERM. Тип сигнала указывается так же, как и для команды kill
killall sends a signal to all processes running any of the specified commands. If no signal name is specified, SIGTERM is sent.
Разница между kill и killall только в том, что 1-ый убивает конкретный процесс (по pid'у), а 2-ой убивает все процессы с одинаковым именем (или по регулярке).
Вы только в Solaris killall не набирайте :) Он делает именно то, что написано в названии команды.
Хорошо хоть, если набрать killall httpd в Солярке он ругается на аргумент, а не начинает всех мочить.
НЛО прилетело и опубликовало эту надпись здесь
Я тебя ненавижу.
НЛО прилетело и опубликовало эту надпись здесь
оно и без рута делов наделало. Вот дурная привычка все попробовать. (rm -rf не предлагать)
Дык и что получается в итоге? Остаётся ядро оси без единого процесса? Зачем такая комманда нужна?
Она вызывается процессом shutdown. Завершает все процессы, не задействованные непосредственно в процессе shutdownа, после чего можно отмонтировать файловые системы.
Используйте pkill ( [pattern] kill ).
Всегда интересовало чем оно отличается от киллолла, и всегда было лениво посмотреть ))
Ну он по куску убивает.
Например pkill ftp убьет как ftp так и proftpd :)
Перенес топик в блог «Linux для всех», так как он самый читаемый. Блога POSIX, к сожалению, нет, а блог, посвящённый Unix, судя по контенту предназначен для постов о том самом Юниксе.
Читаю RSS, в наушниках <a href=«graphics.stanford.edu/~monzy/KillDashNine.mp3>песня, а на хабре тоже про kill dash nine. Не к добру это.
Ой.
Вот тебе и ой
спасибо, но man kill покороче и информативнее
Тема поста: «Не используйте kill -9». В man kill информативнее рассказывается о последствиях применения -9? Мне казалось, там ничего про это нет.
Здесь о последствиях тоже не особо рассказывается, только довольно-таки параноидальное «дочерние процессы останутся в памяти и станут «осиротевшими» (orphaned), файловая система окажется засорена временными файлами, сегменты совместно используемой памяти — активными, сокеты — зависшими, а функция atexit(3) вообще не будет выполнена». Сразу же хочется спросить «и что?» Чем это грозит простому обывателю? /tmp и так забивается, потому что не все программы аккуратно чистят за собой временные файлы, сокеты отвалятся по тайм-ауту. Привели бы пример реального вреда с реальными и не криво написанными приложениями, когда kill -9 может повлечь за собой существенные проблемы, которых можно избежать, используя другие сигналы.
Но это уже больше, чем написано в man. Именно про это я и писал (см. комментарий выше).

Ну а простому обывателю достаточно слов «засорена» и «зависшими» и что все это плохо. Интересующиеся темой более углубленно скорее всего уже знают, что это значит и не поленятся посмотреть man 3 atexit. Да и что теперь, разжевывать каждый технический пост для всех?
Так блог же называется Linux _для всех_ =)
>Да и что теперь, разжевывать каждый технический пост для всех?
А каков тогда смысл этого поста?
Главная мысль — применять -9 плохо, она объяснена. Написано, чем это грозит. А если нужны объяснения терминов и подробности, то можно и самостоятельно поискать и углубиться в тему. Тем более, что на основе такого поста сделать это легче.

А может здесь еще расписать, что такое сигналы, что это вообще за команда kill? Мне кажется, это тема отдельного обсуждения. Тут специфичный вопрос рассматривается.
>Главная мысль — применять -9 плохо, она объяснена.
Плохо применять её без достаточных на то оснований. А настолько пространное объяснение ситуации с SIGKILL дано в любой книге о Линукс.
>Написано, чем это грозит.
"… иначе ваш компьютер может выйти из строя".
дочерние процессы останутся в памяти и станут «осиротевшими» (orphaned), файловая система окажется засорена временными файлами, сегменты совместно используемой памяти — активными, сокеты — зависшими, а функция atexit(3) вообще не будет выполнена

Где здесь «пространное»? Одна конкретика.
>Главная мысль — применять -9 плохо, она объяснена.
Плохо применять её без достаточных на то оснований. А настолько пространное объяснение ситуации с SIGKILL дано в любой книге о Линукс.
>Написано, чем это грозит.
"… иначе ваш компьютер может выйти из строя".
Сразу же хочется спросить «и что?» Чем это грозит простому обывателю?
Действительно. Написали бы проще: «Всякий раз, когда вы используете kill -9, Бог убивает котёнка (у которого, как известно, 9 жизней)». Было бы гораздо нагляднее ;)
Страшно подумать, что делают с котятами при выполнении fork…
Тыкают в них вилкой.
man signal видимо не видели…
Самое удобное для меня: killall имя_процесса, так как при наборе имени процесса очень хорошо помогает bash_completion
Меня интересует другое: что надо отправить (какой сигнал) firefox'у, чтобы он не сбрасывал кеш?
Капитан Очевидность?
Каждый должен сам прочитать ман по используемой приложухе и понять, какой сигнал использовать. А пока не видно разницы — зачем использовать что-то кроме SIGKILL?
Так здесь же и написано, в чем разница в общем случае, для тех, кто ее не видит.
а я крестиком окошки закрываю…
А я привык pkill — 9 -f <название>, ну ничего с собой поделать не могу :-(
отвыкай, фигли)
больше тут ничего не скажешь — kill -kill нужен в 1 случае из 100 и является звоночком «а что это за приложение такое глючное?»
Да тут скорее в лени дел. Гарантированно убить и забыть или отправлять запрос на закрытие, а потом еще ждать и контроллировать, убился ли там процесс.
НЛО прилетело и опубликовало эту надпись здесь
Бывало, с предыдущей версией Weblogic. Лечилось чтением лога и удалением lock-файла. Больше приложений таких не встречал и от привычки не отказался.
а что, кто-то убивает процесссы SIGKILL'ом до попытки завершить его стандартными средствами?
+1 =)
Обычно так происходит в скриптах, когда правильнее сделать очередно. «Так ведь быстрее»
Посмотрел бы я, как вы будете неспеша перебирать другие сигналы на тормозном терминале на другой конец мира в тот момент, когда взбесившаяся софтина гадит гигабайты на винт ;-)
А если SIGSTOP и потом уже разбираться?
Как я понимаю, статья о том, что если сидишь сервере, отредактировал конфиг, и внезапно захотелось рестартнуть mysql, то не надо делать killall -9 mysqld, а нужно рестартнуть его своими средствами.

Когда LA — 1000, и надо что-то сделать, пока не отвалился ssh — то да, kill -9 спасает.
Тогда, вероятно, стоило дописать про всякие init.d/blahblah start|stop. С mysql там ещё mysqld_safe есть, который его перезапустит, так что задача уничтожения mysqld может так не решиться :-)
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Глаза открыли прям. Всю жизнь пользовал kill -9 по не знанию.
Не до конца понял фразу «Сигнал HUP «подвешивает» шелл, поэтому это хороший способ очистить шелл, повисший в ожидании ввода, или закрыть SSH-сессию.» Как подвешивание может быть способом очистить?
Будто SIGKILL кто-то использует просто так. Обычно то говно, которое приходится так прибивать, не ставит сигхендл на SIGTERM :]
Живой пример можете увидеть постом выше. Ну хоть кому-то этот топик помог…
Платиновые К.О.-треды на хабре.
Как то столкнулся с проблемой, что kill -9 не убивал процесс. Как выяснилось — если процесс в состоянии UNINTERUPTABLE — даже kill -9 не поможет.

С обсуждения понравелась метафора про kill:

SIGTERM передается процессу, чтобы он умер сам (император приказал совершить сеппуку). SIGKILL отрабатывается ядром (император послал наемного убийцу) (с) no-dashi
основная идея: не используйте kill -9, т.к. всякие кривые линуксные приложения (которыми система набита до отказа) будут глючить ещё больше, чем обычно
kill -9 windows-*
Это означает, что убивая процесс с помощью kill -9, дочерние процессы останутся в памяти и станут «осиротевшими» [...]

Ну честное слово, невозможно читать такие предложения.
Кто убивает процесс? Дочерние процессы?
Если уж так хочется использовать деепричастный оборот — согласуйте его, это же не сложно.
Спасибо за замечание, исправил.
последний совет весьма актуален. Я сам пишу kill -HUP с тех пор, как однажды убил init (kill 1)
:)
все вы написали правильно, не надо килл -9, но бывает что приходится и тогда:

> Это означает, что после завершения процесса с помощью kill -9, дочерние процессы останутся в памяти и станут «осиротевшими» (orphaned)…

дык
ps -ef
покажет искомые процессы. Там в колонке PID — ID процесса, а в PPID — ID процесса-родителя. После чего если у нас несколько процессов с одним и тем же именем, то смотрим на время исполнения и время запуска (в след колонках) и убиваем всех родителей/потомков kill -9
очевидно что лучше сразу
ps -ef | grep — выведет не только зависший процесс-родитель, но и те процессы для которых он является папой
используйте pkill
если надо посмотреть, что процесс породил, то лучше использовать htop, в котором по F5 показывается дерево.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории