Как убить процесс? kill -9 не работает.
Есть процесс. Жрет 100% CPU и продолжает выделять память. Его надо убить.
Пробовал всё сигналы которые только есть. и kill -KILL, kill -INT, kill -ABRT, kill -TERM .
И вручную вызывая kill и через htop.
после renice +19 — стал меньше жрать CPU. Но так и не убился — продолжал ратотать.
Тогда я закрыл — терминал (xterm) в котором запустил этот процесс. Не помогло.
Рестартанул иксы — не помогло.
Ребутнул машину — помогло (минут 10 шатдаунился, вместо положених нескольких секунд).
Как. Как убить процесс? Гарантировано? Чтоб он умер?
Re: Как убить процесс? kill -9 не работает.
процесс кому принадлежит? Убиваешь из под кого? У меня было и не раз, что только рутом убивался.
Re: Как убить процесс? kill -9 не работает.
Re: Как убить процесс? kill -9 не работает.
>процесс кому принадлежит?
Юзерский. Убивал и из под юзера и через sudo.
Re: Как убить процесс? kill -9 не работает.
>лопатой
$ sudo apt-get install лопата
E: Couldn’t find package лопата
А точнее)
Re: Как убить процесс? kill -9 не работает.
я такое один раз видел. Причины остались невыяснеными.
Re: Как убить процесс? kill -9 не работает.
sensor что говорят. Так ничего у вас не греется часом. Или оный процесс не висит случайно в попытке read 3 на недоступный ресурс?
Re: Как убить процесс? kill -9 не работает.
> Как убить процесс? Гарантировано? Чтоб он умер?
Никак. Есть ситуации, при которых процессы не умирают. Обычно это связано с неправильным функционированием железа в сочетании с кривыми драйверами. Распознается по нахождению процесса в состоянии D.
Re: Как убить процесс? kill -9 не работает.
Покажи дерево процессов, относящихся к твоему живчику.
Re: Как убить процесс? kill -9 не работает.
Re: Как убить процесс? kill -9 не работает.
Re: Как убить процесс? kill -9 не работает.
Re: Как убить процесс? kill -9 не работает.
> Странно. Что вообще никак?
С гарантией — никак. В 99.99% случаев kill -9 в конце концов доходит до процесса, но иногда. Есть такое состояние процесса — TASK_UNITERRUPTIBLE, оно часто используется в драйверах при ожидании завершения В/В, и в нем процесс не реагирует на сигналы. Халтурно сделанные драйверы не взводят при этом тайм-аут, и потенциально процесс может остаться вечным и неубиваемым. Такое бывает еще и при внезапно отвалившихся ФС (сетевых или локальных — без разницы). Однако то, что у тебя процесс «чистый» (без В/В), и при этом не убивается — странно. В логах что-нибудь есть?
> ghisguth 12911 5.1 68.7 21782180 1400096 pts/7 Dl+ 00:15 0:16 ./test -asegfault2 —int1=500
Попробуй убивать его из-под рута.
Какая версия ядра? Какой дистр?
Re: Как убить процесс? kill -9 не работает.
>С гарантией — никак. В 99.99% случаев kill -9 в конце концов доходит до процесса, но иногда.
Теперь вроди как понятно почему нет реакции на kill (D == Uninterruptible sleep == TASK_UNITERRUPTIBLE). Но почему он стал таким — не совсем ячно. Единственная задача программы упасть попортив стек в потоках.
>Попробуй убивать его из-под рута.
Пробовал — ноль реакции. По идее чтоб остановить такой процесс — надо в самом ядре изменить статус задачи. Может можно это сделать через /proc/ интерфейс?
>Какая версия ядра?
Linux x61s 2.6.24-17-generic #1 SMP Thu May 1 13:57:17 UTC 2008 x86_64 GNU/Linux
>Какой дистр?
Ubuntu 8.04
Re: Как убить процесс? kill -9 не работает.
> Но почему он стал таким — не совсем ячно.
> Может можно это сделать через /proc/ интерфейс?
Я бы попробовал ванильное 2.6.24.7 или 2.6.25.4
Re: Как убить процесс? kill -9 не работает.
А нельзя ли запустить снова через strace и посмотреть, что именно за ввод-вывод он в это время делает?
И я правильно понял, что время он кушает именно в ядре? (/usr/bin/top покажет как %sy)
Re: Как убить процесс? kill -9 не работает.
Если оно в ядре — ему может быть пофиг на киллы. Возможно либо кривое железо, либо криво собранное ядро, либо просто бага в ядре.
Re: Как убить процесс? kill -9 не работает.
У меня какое-то смутное подозрение, что процесс, который специально затирает свою память, может не реагировать на kill’ы, примерно как циклоп в выколотым глазом может не оценить искусства Марселя Марсо.
Re: Как убить процесс? kill -9 не работает.
> процесс [. ] может не реагировать на kill’ы
kill -9 неотменяемый и неперехватываемый. И не реагировать на kill он может только если ждет чего-то в ядерной функции.
Re: Как убить процесс? kill -9 не работает.
> И не реагировать на kill он может только.
я правильно понимаю, это ядро его должно прибить, а не он сам «сдохнуть», да? т.е. сигнал, он через ядро передается, да?
Re: Как убить процесс? kill -9 не работает.
> kill -9 неотменяемый и неперехватываемый.
> И не реагировать на kill он может только если ждет чего-то в ядерной функции.
После того, как стек переписан рэндомными байтами, поведение процесса становится непредсказуемым. Что значит — реагирует-не реагирует, если у него вместо реагировалки написаны цифры числа пи после миллионного знака?
Re: Как убить процесс? kill -9 не работает.
Вопрос решен. Всё оказалось достаточно просто;)
Проблема заключалась в следующем:
1. при записи рандомных значений в стек — падение происходит не с одинаковыми интервалами времени. Тоесть программа работает до сегфолта затирая память иногда секунды 3-5, а иногда 20-30.
2. Чем раньше случился сегфолт — тем меньше стартовало потоков и меньше памяти было затерто.
3. генерация коры проходит быстро если сегфолт произошел в течении 1-10 секунд. Если программа проработала достаточно долго — то генерация коры может длится до 5 минут (у меня стоит большое ограничение на размер коры и пока ядро запишет всю инфу которую хочет — например всю память которую подпортила програма — проходит много времени).
4. Соответственно ядро производит дамп коры и в этот момент его прервать нельзя.
Всем спасибо за помощь.
Re: Как убить процесс? kill -9 не работает.
> После того, как стек переписан рэндомными байтами
Передачей сигналов ведает ЯДРО.
Сигнал kill приводит к жестокому и стремительному «выносу» процесса из таблицы процессов. С освобождением всех его ресурсов — в том числе страниц стека, файловых дескрипторов, mmap и прочим. И ядро при выносе задачи не смотрит на то что у нее там написано в юзерспейсе.
Состояние процесса (спит, ждет завершения операции в ядре, выполняется и прочее) записаны во внутренних таблицах ядра, и задача к ним доступа не имеет, поэтому пусть она все что захочет себе куда угодно пишет.
P.S.: и раздачей сигналf родительскому процессу о том, что дочерний процесс был прибит, также ведает ядро, если что.
> если у него вместо реагировалки написаны цифры
Еще раз, man signal: < The signals SIGKILL and SIGSTOP cannot be caught or ignored>. Эти сигналы обрабатываются целиком ядром, на основании его внутренних структур, и до процесса не доводятся. И что там процесс попытался навесить на эти сигналы, никого не колебет.
Re: Как убить процесс? kill -9 не работает.
> это ядро его должно прибить, а не он сам «сдохнуть», да?
Да. SIGTERM передается процессу, чтобы он умер сам (император приказал совершить сеппуку). SIGKILL отрабатывается ядром (император послал наемного убийцу).
Re: Как убить процесс? kill -9 не работает.
Я так делаю,
сначала вот:
ps aux | grep -i «примерное_название_головного_исполн_файла»
например mplayer
Потом точнее:
sudo killall mplayer
Re: Как убить процесс? kill -9 не работает.
> Да. SIGTERM передается процессу, чтобы он умер сам (император приказал совершить сеппуку). SIGKILL отрабатывается ядром (император послал наемного убийцу).