Мой сайт Вторник, 14.05.2024, 02:05
Приветствую Вас Гость | RSS
Главная | Каталог статей | Регистрация | Вход
» Меню сайта

» Категории раздела
Мои статьи [1]
Войны Сети [14]
Пророки [2]
Железо.Ком [7]
Языки программирования [2]

» Архивчик

» Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

» Форма входа

Главная » Статьи » Войны Сети

Проце́сс-зо́мби, зо́мби

Проце́сс-зо́мби, зо́мби


Проце́сс-зо́мби, зо́мби (англ. zombie process, англ. defunct process) — дочерний процесс в Unix-системе, завершивший своё выполнение, но еще присутствующий в списке процессов операционной системы, чтобы дать родительскому процессу считать код завершения.

Этимология

Происходит от слова «зомби», означающего «живой мертвец» (оксюморон, англ. undead). Термин является яркой метафорой о том, что процесс «умер», но не «погребён».

Возникновение зомби

  Процесс при завершении освобождает все свои ресурсы (за исключением PID — идентификатора процесса) и становится «зомби» — пустой записью в таблице процессов, хранящей код завершения для родительского процесса.

  Система уведомляет родительский процесс о завершении дочернего с помощью сигнала SIGCHLD. Предполагается, что после получения SIGCHLD он считает код возврата с помощью системного вызова wait(), после чего запись зомби будет удалена из списка процессов.

  Если родительский процесс игнорирует SIGCHLD (а он игнорируется по умолчанию), то зомби остаются до его завершения.

Проблемы зомби

Игнорирование SIGCHLD в принципе не является правильным, но может быть приемлемо для короткоживущих программ (некоторые программы могут делать это намеренно, например, для исключения повторения PID). Но для долгоживущих и часто создающих дочерние процессы программ это неприемлемо, потому что накапливание зомби приводит к «утечке ресурсов» (то есть к их постепенному блокированию).

Зомби не занимают памяти (как процессы-сироты), но блокируют записи в таблице процессов, размер которой ограничен для каждого пользователя и системы в целом.

  При достижении лимита пользователь, от имени которого выполняется программа, и все его программы не будут способны создавать новые дочерние процессы. Кроме всего прочего пользователь, от имени которого выполняется родительский процесс, не сможет зайти на консоль (локальную или удаленную) или выполнить какие-либо команды на уже открытой консоли (потому что для этого командный интерпретатор sh должен создать новый процесс), и для восстановления работоспособности (завершения виновной программы) будет необходимо вмешательство системного администратора.

  Если же процесс выполнялся от имени суперпользователя, то проблему может решить только перезагрузка (причем зачастую — только аппаратным рестартом). Некоторые операционные системы (например, Sun Solaris) при возникновении такой ситуации аварийно завершают часть выполняющихся процессов, восстанавливая работоспособность системы. Одна из компьютерных баек утверждает, что Solaris может таким образом аварийно завершить выполнение корневого родительского процесса init (что приведет к остановке системы).

Примеры программ, создающих зомби, на разных языках программирования

Си:

#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main ()
{
pid_t child_pid;

child_pid = fork ();
if (child_pid > 0) {
sleep (60);
}
else {
exit (0);
}
return 0;
}

Разное

  • Зомби не могут принимать сигналы, и поэтому их нельзя убрать с помощью утилиты или вызова kill. Убрать их может либо родительский процесс, либо его завершение.(см.прим.
  • Все процессы в Unix имеют своих родителей — процессы, не имеющие или потерявшие родителей («осиротевшие» процессы; англ. orphan process), являются дочерними для init (процесс с PID = 1), который в свою очередь является дочерним для ядра (процесса с PID = 0). init всегда обрабатывает SIGCHLD, поэтому от таких процессов никогда не остается зомби.
  • Зомби можно узнать в списке процессов (выводимых утилитой ps) по флагу «Z» в колонке STAT.
  • Хорошим стилем программирования считается всегда обрабатывать SIGCHLD.
  • Языки скриптов Perl и Python неявно обрабатывают SIGCHLD, если программа настраивает его игнорирование.
Категория: Войны Сети | Добавил: Fred (11.10.2009)
Просмотров: 905 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
» Архив программ
[02.11.2009][Мои файлы]
Песенка (1)
[02.11.2009][Мои файлы]
Песня о конт страйке.. (1)

» Архив записей
[10.10.2009][Войны Сети]
Манифест хакера (2)
[10.10.2009][Войны Сети]
КОМПЬЮТЕРНЫЕ ВИРУСЫ (2)
[11.10.2009][Войны Сети]
Компьютерный червь (2)
[11.10.2009][Войны Сети]
Троя́нская программа (0)
[11.10.2009][Войны Сети]
Проце́сс-зо́мби, зо́мби (0)
[11.10.2009][Войны Сети]
Шпионский программны (0)
[12.10.2009][Пророки]
Предсказания Ванги о России (3)
[12.10.2009][Пророки]
Ностродамус о России (37)
[17.10.2009][Процы]
Процессоры (6)
[18.10.2009][Материнская плата]
Основы по мат. платам (3)

» Друзья сайта
  • Все для веб-мастера
  • Программы для всех
  • Мир развлечений
  • Лучшие сайты Рунета
  • Кулинарные рецепты


  • Copyright MyCorp © 2024