В большинстве систем Unix службы запускаются и останавливаются системой init . Многие дистрибутивы Linux используют устаревший sysvinit, в котором почти полностью отсутствуют функции управления сервисами, поэтому скрипты в /etc/init.d
или /etc/rc.d
выполняют фактическую работу по запуску или уничтожению Apache. Эти начальные индексы написаны простым текстом и не имеют других средств отслеживания запускаемых ими процессов - кроме чтения его PID из предустановленного местоположения. (Initscript может знать PIDS только о процессах, которые он запускал напрямую, но не о дочерних процессах этих процессов, а также о процессах, запущенных в последний раз, когда был вызван тот же сценарий. Это означает, что initscript не может отслеживать процессы, которые были запрограммированы для того, чтобы "демонизировать" себя.)
(Да, процесс можно найти с помощью ps -ef
или непосредственно с помощью /proc
. Тем не менее, это несколько ненадежный метод - может быть одновременно запущено несколько процессов Apache: например, mpm-prefork или несколько независимых конфигураций Apache. Из-за этого почти каждый демон в Linux создаст "pidfile" в /run
или /var/run
, чтобы его можно было легко остановить с помощью initscript. Скорее всего, у вас будут crond.pid
, ntpd.pid
, rsyslogd.pid
, sshd.pid
и т.д.)
Только очень недавние системы инициализации Linux беспокоят процессы отслеживания: Upstart в Ubuntu нужно точно указать, сколько ожидаемых форков, в то время как systemd в Fedora использует cgroups ядра для отслеживания процессов, принадлежащих сервису.