Що означає there is 1 zombie process і що з ним робити stack overflow російською

Залогінився на віддалену машину. Бачу наступний рядок у вітальному повідомленні.

There is 1 zombie process.

Наскільки я зрозумів. це означає, що якийсь процес завершив роботу, але не закрився і не звільнив ресурси. Хотілося б краще зрозуміти проблему:







  • Як можна його виявити? Зараз я вгадав, але потрібен стабільний метод.
  • Як можна дізнатися причини його появи? Є якісь логи? Може, за наявним процесу можна що-небудь зрозуміти?

Якщо це важливо, ubuntu 14.04, sudo є.

Доповнення: мене не влаштовує метод «просто почекати», тому що є сервіс, який повинен працювати завжди - і подвіс він або хтось із його дітей. Він подстрахован monit'ом, але той не розпізнав Зомбіфікація і не перезавантажив.

заданий 19 Січня '16 в 5:37

Як можна дізнатися причини його появи? - батько його (ще) НЕ ріпнул, можливо, ріпнет пізніше. При завершенні батька все дочірні процеси будуть усиновлені батьківським процесом батька, де, швидше за все, все і розрулиться. Сам зомбі процес займає, наскільки пам'ятаю, всього нічого (буквально сам запис в таблиці), тому поки немає прогресії, все повинно бути в порядку. - etki 19 Січня '16 о 6:10

все і розрулиться - все що виникали в моїй практиці zombie-процеси (а траплялися вони дуже рідко і було це дуже давно) продовжували існувати до перезавантаження системи. - alexander barakin 19 Січня '16 в 6:26

Замби - плід помилки в батьку, він просто забув про дитину. Якщо батько сильно зайнятий і не реагує на сигнали, то він може просто вчасно не забрати код завершення. так що на дуже короткий час ps може і в повністю справній системі. Але вихід прибрати зомбі тільки один - вбити батька. Так що доведеться вчити моніт розуміти зомбі, дізнаватися батьків. - Mike 19 Січня '16 о 6:35







Зомбі в операційних системах UNIX називають завершилися процеси, код завершення яких не забрав батьківський процес. Зомбі не споживають жодних ресурсів, пам'ять і файлові дескриптори таких процесів вже звільнені. Залишається тільки запис в таблиці процесів, яка займає кілька десятків байт пам'яті. Так що одиничний зомбі процес на систему ніяк не впливає. АЛЕ він явний індикатор того, що у якогось процесу в системі що щось пішло не так.

Дана команда покаже все зомбі процеси і їх батьків (тестувалася під linux, під іншими * nix можливі інші ключі у команди ps).

Вбити зомбі можна тільки перезапуском батьківського процесу. kill -9 самого процесу-зомбі і часник зазвичай не допомагають. Якщо поява зомбі разове явище, то можливо простіше на факт його появи забити.

Варіант 2: батьківський процес використовує wait. але зомбі все одно з'являються. Копати в сторону того, який різновид wait використовується, якщо waitpid, яка перевіряє завершення конкретних нащадків, то дивитися звідки вона бере перевіряються pid, можливо в процесі роботи якісь pid нащадків губляться і програма про них забуває. Може програма в якийсь момент забороняє обробку сигналів і забуває відновити обробку, після проходження критичного ділянки. Знову ж - варіантів дуже багато, але вони сконцентровані навколо обробника SIGCHLD і функцій wait.

Варіант 3: батьківський процес вміє обробляти і готовий правильно обробити завершення своїх нащадків. Але зациклюється в іншому місці програми або засинає на системному виклику, наприклад читання з мережевого диска, який став недоступний і при цьому переривання по SIGCHLD заборонено. В цьому випадку треба розбиратися з причинами його зависання. До речі, відсутність доступу до будь-яких ресурсів, типу мережевих дисків (або при виході з ладу фізичного диска) - досить часта причина масової появи зомбі.

Яких-небудь спеціальних балок в системі, де можна було б побачити хоч якусь інформацію по з'являтимуться зомбі не існує. Сліди можна знайти тільки в балках тієї програми, яка їх породжує, при їх наявності.

відповідь дан 19 Січня '16 о 8:20