Меню Рубрики

Linux не убивается процесс

Как убить процесс? 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 отрабатывается ядром (император послал наемного убийцу).

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Исправление ошибок mac os
  • Интерфейс mac os sierra
  • Интернет не работает на mac os x
  • Интернет браузер для mac os
  • Интересные приложения для mac os