Назад | Перейти на главную страницу

Что происходит с демоном без ссылки «K» в /etc/rcX.d/

Что происходит с процессами, запущенными init через сценарий инициализации, если для этого сценария нет соответствующего K запись в (например) /etc/rc0.d/?

Например, следующий сценарий запускает демонизированный процесс:

-rwxrwxr-x. 1 root root 3.3K Jul 16 11:48 /etc/rc3.d/S99foobar

Нет соответствующей ссылки (например, /etc/rc0.d/K99foobar) для обработки завершения этих процессов во время выключения / перезагрузки.

Получают ли эти процессы сообщение SIGTERM, за которым следует SIGKILL, от init, когда они выполняются последними? Или init достаточно умен, чтобы позвонить /etc/init.d/foobar stop?

Если вы внимательно посмотрите на процесс завершения работы, вы увидите, что после того, как практически все будет сделано, init убьет все, что еще работает.

В системе Red Hat / CentOS 6 вы увидите:

Sending all processes the TERM signal...

через несколько секунд

Sending all processes the KILL signal...

Все, что к тому времени не было закрыто, будет убито. Это в /etc/rc.d/init.d/halt сценарий, который является последним сценарием, запускаемым при выключении системы.

После этого halt начинает размонтировать файловые системы и выполнять другую окончательную очистку перед выключением, а затем, наконец, фактически останавливает или перезагружает систему.

Все остальные дистрибутивы, использующие выскочку или SysVinit, делают нечто подобное.

Обратите внимание, что эта проблема не возникает с systemd, потому что он всегда знает, какие службы он запустил.

В конце концов, после снятия всего, что может быть сбито, все оставшееся получает «kill -9».