Комментарии 68
Так как все таки кошерно убивать процессы? Что посоветуете?
Про kill -9 и оставшиеся процессы не знал.
Про 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-ой убивает все процессы с одинаковым именем (или по регулярке).
Разница между kill и killall только в том, что 1-ый убивает конкретный процесс (по pid'у), а 2-ой убивает все процессы с одинаковым именем (или по регулярке).
Вы только в Solaris killall не набирайте :) Он делает именно то, что написано в названии команды.
Хорошо хоть, если набрать killall httpd в Солярке он ругается на аргумент, а не начинает всех мочить.
Дык и что получается в итоге? Остаётся ядро оси без единого процесса? Зачем такая комманда нужна?
Используйте pkill ( [pattern] kill ).
Перенес топик в блог «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. Да и что теперь, разжевывать каждый технический пост для всех?
Ну а простому обывателю достаточно слов «засорена» и «зависшими» и что все это плохо. Интересующиеся темой более углубленно скорее всего уже знают, что это значит и не поленятся посмотреть man 3 atexit. Да и что теперь, разжевывать каждый технический пост для всех?
Так блог же называется Linux _для всех_ =)
>Да и что теперь, разжевывать каждый технический пост для всех?
А каков тогда смысл этого поста?
А каков тогда смысл этого поста?
Главная мысль — применять -9 плохо, она объяснена. Написано, чем это грозит. А если нужны объяснения терминов и подробности, то можно и самостоятельно поискать и углубиться в тему. Тем более, что на основе такого поста сделать это легче.
А может здесь еще расписать, что такое сигналы, что это вообще за команда kill? Мне кажется, это тема отдельного обсуждения. Тут специфичный вопрос рассматривается.
А может здесь еще расписать, что такое сигналы, что это вообще за команда kill? Мне кажется, это тема отдельного обсуждения. Тут специфичный вопрос рассматривается.
>Главная мысль — применять -9 плохо, она объяснена.
Плохо применять её без достаточных на то оснований. А настолько пространное объяснение ситуации с SIGKILL дано в любой книге о Линукс.
>Написано, чем это грозит.
"… иначе ваш компьютер может выйти из строя".
Плохо применять её без достаточных на то оснований. А настолько пространное объяснение ситуации с SIGKILL дано в любой книге о Линукс.
>Написано, чем это грозит.
"… иначе ваш компьютер может выйти из строя".
>Главная мысль — применять -9 плохо, она объяснена.
Плохо применять её без достаточных на то оснований. А настолько пространное объяснение ситуации с SIGKILL дано в любой книге о Линукс.
>Написано, чем это грозит.
"… иначе ваш компьютер может выйти из строя".
Плохо применять её без достаточных на то оснований. А настолько пространное объяснение ситуации с SIGKILL дано в любой книге о Линукс.
>Написано, чем это грозит.
"… иначе ваш компьютер может выйти из строя".
Сразу же хочется спросить «и что?» Чем это грозит простому обывателю?Действительно. Написали бы проще: «Всякий раз, когда вы используете kill -9, Бог убивает котёнка (у которого, как известно, 9 жизней)». Было бы гораздо нагляднее ;)
man signal видимо не видели…
killall NAME?
Самое удобное для меня: killall имя_процесса, так как при наборе имени процесса очень хорошо помогает bash_completion
Меня интересует другое: что надо отправить (какой сигнал) firefox'у, чтобы он не сбрасывал кеш?
Меня интересует другое: что надо отправить (какой сигнал) firefox'у, чтобы он не сбрасывал кеш?
Капитан Очевидность?
Каждый должен сам прочитать ман по используемой приложухе и понять, какой сигнал использовать. А пока не видно разницы — зачем использовать что-то кроме SIGKILL?
Каждый должен сам прочитать ман по используемой приложухе и понять, какой сигнал использовать. А пока не видно разницы — зачем использовать что-то кроме SIGKILL?
а я крестиком окошки закрываю…
А я привык pkill — 9 -f <название>, ну ничего с собой поделать не могу :-(
отвыкай, фигли)
больше тут ничего не скажешь — kill -kill нужен в 1 случае из 100 и является звоночком «а что это за приложение такое глючное?»
больше тут ничего не скажешь — kill -kill нужен в 1 случае из 100 и является звоночком «а что это за приложение такое глючное?»
Да тут скорее в лени дел. Гарантированно убить и забыть или отправлять запрос на закрытие, а потом еще ждать и контроллировать, убился ли там процесс.
а что, кто-то убивает процесссы SIGKILL'ом до попытки завершить его стандартными средствами?
+1 =)
Обычно так происходит в скриптах, когда правильнее сделать очередно. «Так ведь быстрее»
Посмотрел бы я, как вы будете неспеша перебирать другие сигналы на тормозном терминале на другой конец мира в тот момент, когда взбесившаяся софтина гадит гигабайты на винт ;-)
А если SIGSTOP и потом уже разбираться?
Как я понимаю, статья о том, что если сидишь сервере, отредактировал конфиг, и внезапно захотелось рестартнуть mysql, то не надо делать killall -9 mysqld, а нужно рестартнуть его своими средствами.
Когда LA — 1000, и надо что-то сделать, пока не отвалился ssh — то да, kill -9 спасает.
Когда LA — 1000, и надо что-то сделать, пока не отвалился ssh — то да, kill -9 спасает.
Глаза открыли прям. Всю жизнь пользовал kill -9 по не знанию.
Не до конца понял фразу «Сигнал HUP «подвешивает» шелл, поэтому это хороший способ очистить шелл, повисший в ожидании ввода, или закрыть SSH-сессию.» Как подвешивание может быть способом очистить?
Не до конца понял фразу «Сигнал HUP «подвешивает» шелл, поэтому это хороший способ очистить шелл, повисший в ожидании ввода, или закрыть SSH-сессию.» Как подвешивание может быть способом очистить?
Будто SIGKILL кто-то использует просто так. Обычно то говно, которое приходится так прибивать, не ставит сигхендл на SIGTERM :]
Платиновые К.О.-треды на хабре.
Как то столкнулся с проблемой, что kill -9 не убивал процесс. Как выяснилось — если процесс в состоянии UNINTERUPTABLE — даже kill -9 не поможет.
С обсуждения понравелась метафора про kill:
SIGTERM передается процессу, чтобы он умер сам (император приказал совершить сеппуку). SIGKILL отрабатывается ядром (император послал наемного убийцу) (с) no-dashi
С обсуждения понравелась метафора про kill:
SIGTERM передается процессу, чтобы он умер сам (император приказал совершить сеппуку). SIGKILL отрабатывается ядром (император послал наемного убийцу) (с) no-dashi
основная идея: не используйте kill -9, т.к. всякие кривые линуксные приложения (которыми система набита до отказа) будут глючить ещё больше, чем обычно
Это означает, что убивая процесс с помощью kill -9, дочерние процессы останутся в памяти и станут «осиротевшими» [...]
Ну честное слово, невозможно читать такие предложения.
Кто убивает процесс? Дочерние процессы?
Если уж так хочется использовать деепричастный оборот — согласуйте его, это же не сложно.
Ну честное слово, невозможно читать такие предложения.
Кто убивает процесс? Дочерние процессы?
Если уж так хочется использовать деепричастный оборот — согласуйте его, это же не сложно.
последний совет весьма актуален. Я сам пишу kill -HUP с тех пор, как однажды убил init (kill 1)
:)
:)
все вы написали правильно, не надо килл -9, но бывает что приходится и тогда:
> Это означает, что после завершения процесса с помощью kill -9, дочерние процессы останутся в памяти и станут «осиротевшими» (orphaned)…
дык
ps -ef
покажет искомые процессы. Там в колонке PID — ID процесса, а в PPID — ID процесса-родителя. После чего если у нас несколько процессов с одним и тем же именем, то смотрим на время исполнения и время запуска (в след колонках) и убиваем всех родителей/потомков kill -9
> Это означает, что после завершения процесса с помощью kill -9, дочерние процессы останутся в памяти и станут «осиротевшими» (orphaned)…
дык
ps -ef
покажет искомые процессы. Там в колонке PID — ID процесса, а в PPID — ID процесса-родителя. После чего если у нас несколько процессов с одним и тем же именем, то смотрим на время исполнения и время запуска (в след колонках) и убиваем всех родителей/потомков kill -9
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Не используйте kill -9