LINUX.ORG.RU

Причины неубиваемости процесса по kill -9. Zombie, D.


0

5

Какие вы можете вспомнить причины неубиваемости процесса по -9 ?

А zombie может держать какие-либо ресурсы (кроме памяти), дескрипторы, открытые устройства и т.п.?

А почему вообще возможно наличие zombie при ещё живом init?

★☆

Последнее исправление: kiverattes (всего исправлений: 1)

Баг ядра.

anonymous
()

Плюсую баг в ведре. У самого такое неоднократно было.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Gotf

А zombie может держать какие-либо ресурсы (кроме памяти), дескрипторы, открытые устройства и т.п.?

А почему вообще возможно наличие zombie при ещё живом init?

kiverattes ★☆
() автор топика
Ответ на: комментарий от kiverattes

А zombie может держать какие-либо ресурсы (кроме памяти), дескрипторы, открытые устройства и т.п.?

Нет, в том числе и память освобождается.

А почему вообще возможно наличие zombie при ещё живом init?

Init не может его подобрать, потому что зомби уже завершился. Собственно, http://en.wikipedia.org/wiki/Zombie_process

Gotf ★★★
()
Ответ на: комментарий от Gotf

Есть ресурсы, которые он все-таки держит. Например, PID. А это значит, что если зомбаков слишком много, и они почему-то не чистятся, или чистятся недостаточно быстро и есть процесс, который их плодит, то вероятен сценарий, когда не удастся запустить больше ни один процесс, так как места в таблице процессов нет.

Kiborg ★★★
()
Ответ на: комментарий от kiverattes

Зомби существует до тех пор, пока их не подберет (поинтересуется их судьбой или откажется от них) папашка. Соответственно пока он жив init их не заберет. А вот в случае смерти родителя все дети в сиротский дом init и он уж их захоронит (ибо очень любопытен). Впрочем наблюдал такой напряг init-а, что он сим делом заниматся не смог.

io ★★
()
Последнее исправление: io (всего исправлений: 1)

state D вам о чем нибудь говорит?

x0r ★★★★★
()

например, если процесс висит в системном вызове, по -9 он не убьется, пока не завершится вызов.

cvs-255 ★★★★★
()
Ответ на: комментарий от cvs-255

А что будет, если процесс сделал какой-нибудь вызов ioctl на внешнее USB-устройство, а оно ёпнулось и навечно повисло, повесив за собой ioctl. Как сделать так, чтобы такой вызов вернулся?

kiverattes ★☆
() автор топика
Ответ на: комментарий от kiverattes

Использовать микроядро на жабе/питоне/руби.

anonymous
()
Ответ на: комментарий от TEX

А если у меня этим USB-девайсом занимается какой-нибудь модуль ядра, можно модуль ядра насильно выдернуть с освобождением всего занятого?

kiverattes ★☆
() автор топика
Последнее исправление: kiverattes (всего исправлений: 1)
Ответ на: комментарий от kiverattes

ymn

По rmmod -f выдернуть модуль можно, но освобождения ресурсов при этом не происходит. Более того, если этот модуль используется какими-либо устройствами, при следующем обращении к любому из них произойдёт kernel panic.

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

Короче, способа борьбы с приложением, навечно повисшим в ядре в вызове ioctl или блокируемом read при глюке внешнего USB-девайса нет?

kiverattes ★☆
() автор топика
Ответ на: комментарий от kiverattes

К сожалению, нет.

Можно попытаться выдернуть девайс (или аппаратно, или записав 1 в /sys/bus/<шина>/devices/<девайс>/remove), но тут тоже может что-нибудь упасть (или запись в remove тоже залочится). Лучше перезагрузиться.

intelfx ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.