Бесконечное количество порождений процессов, несмотря на ожидание и уничтожение (bash)

init— условное название программы, которая выполняется в процессе #1. За прошедшие годы она приняла множество форм, и задачи, которые initвыполняла программа, значительно изменились. Как ни странно, это также имя команды, которую администраторы используют для связи с процессом #1. Их лучше всего рассматривать как две отдельные вещи, и они, безусловно, были задокументированы таким образом в AT&T Unix, даже если они смешаны в некоторых программах. в одной программе, которая ведет себя по-разному в зависимости от того, какой идентификатор процесса она находит. Еще больше сбивает с толку то, что процесс #1 может запускать несколько разных программ за время существования системы, по крайней мере две из которых (в случае систем Linux с initramfs )названыinit(/initв initramfs и /sbin/initв окончательной корневой файловой системе, условно привязав -к первому ).

Менеджер служб — это программа, которая управляет службами, как следует из названия. Его не обязательно запускать как процесс #1, и на самом деле, в широком спектре программного обеспечения операционных систем на протяжении многих лет вообще не был процессом #1. Менеджеры служб варьируются отrunsvГеррита Пейпа черезs6-superviseЛорана Берко к образно названномуservice-managerв моем нош-туосете. Они также охватывают средство доступа к службам AT&T Unix System 5 Release 4, контроллер системных ресурсов IBM AIX 3.1 и средство управления службами Solaris. Они порождают сервисные программы из единого, непротиворечивого, известного контекста.и обеспечить механизмы для управления этими службами (, запуска, прекращения и перезапуска, а также отключения )и их состояния для запроса остальной частью системы.

Администратор системы представляет собой программу, которая управляет системой, занимаясь изменениями состояния системы. Обычно он запускается как процесс #1. Отчасти это связано с тем, что ядро ​​операционной системы обрабатывает его особым образом, отправляя ему информацию о запросах на изменение состояния системы, таких как события сбоя питания или специальные аккорды клавиш. на клавиатуре виртуального терминала ядра (s )(, например в Linux & #x21ee; + генерируя SIGWINCHили & #x2388; + и #x2387; + и #x2326; создание SIGINTдля обработки #1 ). Он также имеет дело с настройкой начального состояния системы при начальной загрузке, а иногда и с завершением состояния системы при завершении работы.

Подробная информация о состоянии системы зависит от программного обеспечения. Ван Смуренбург initдействовал на уровне (, ныне устаревшем ), пробеге -. Конечный автомат BSD initявляется полностью внутренним и имеет такие состояния, как работающий /etc/rc, многопользовательский -пользовательский и однопользовательский .

Тематические исследования:

  • systemdэто процесс #1 программа. Он выполняет как управление службами, так и управление системой в одной программе, работающей как этот процесс. Однако это не касается завершения состояния системы, а вместо этого загружает процесс #1 в другую программу с именем systemd-shutdown. Изменения состояния системы обычно принимают форму запуска/остановки диспетчером служб целей , которые, в свою очередь, вызывают запуск/остановку служб . Некоторые сервисы, такие как emergency.serviceи systemd-halt.service, например, при активации сами запускают systemctl, который отправляет команды обратно процессу #1,для внесения дальнейших изменений состояния системы. В этой схеме завершение работы представляет собой последовательность из двух -состояний.
  • Образно названнаяsystem-managerв моем наборе нош-туалов — это программа процесса #1, которая выполняет только роль системного администратора. Он выполняет инициализацию при начальной загрузке и финализацию при завершении работы. Он управляет системой, порождая (общесистемный -системный )диспетчер служб в качестве другого процесса и различные вызовы программыsystem-controlв ответ на события. (SIGINT, являющийся результатом и #x2388; + и #x2387; + и #x2326; Например, аккорд на клавиатуре KVT вызывает запуск дочернего процесса system-control start secure-attention-key.)system-controlвыдает команды диспетчеру служб для запуска и остановки служб и целей. Точно так же несколько служб/целей вызывают system-controlдля отправки команд обратно системному менеджеру, чтобы после их активации запрашивались дальнейшие изменения состояния системы. Сервисные процессы являются внуками процесса #1.
  • runit— это программа процесса #1, которая также занимается только управлением системой. Он порождает диспетчер служб, как и другие процессы. Это делается на том, что люди runit называют «стадией 2», путем вызова сценария оболочки, который, в свою очередь, загружает по цепочке runsvdir, что, в свою очередь, порождает несколько программ runsvкак дочерние процессы процесса #. 1. Сервисные процессы великолепны. -внуки процесса #1. Управление системой использует подход «просто запустите три сценария оболочки», запускаемый комбинацией сигналов и файлов флагов.
  • Система 5 initбыла программой процесса #1, которая выполняла только управление системой. У него были вышеупомянутые уровни выполнения -в качестве состояний системы, и теоретически он также мог быть диспетчером служб. На самом деле его возможности управления службами были настолько бедны, что через несколько лет они даже больше не использовались для управления службами входа в систему TUI.Он породил (гораздо более функциональные )диспетчеры служб в качестве дочерних процессов в формах вышеупомянутых SAF и SRC.

    К 1990 году количество используемых уровней выполнения -сократилось до 1, в результате чего практически такая же конструкция в реальной эксплуатации была реализована в Nosh system-managerвсе эти десятилетия спустя, а процесс #1 в значительной степени просто порождал службу. дочерний процесс менеджера и дополнительные дочерние процессы для запуска команд в ответ на события ядра и команды администратора. Сервисные процессы являются пра-внуками процесса #1, пра-потомками и потомками различных процессов менеджера служб. (Процесс службы входа в систему TUI порождается процессом ttymon, который сам порождается процессом sac, порожденным, например, процессом #1.)

  • van Smoorenburg initпохожа на System 3 initи System 5 initза несколько лет до появления вышеупомянутых менеджеров служб в Unix. Это процесс #1, программа, выполняющая роль системного менеджера, а также управляющая некоторыми службами (, хотя и с тем же недостаточным качеством, не позволяющая точно контролировать запуск/остановку отдельных служб, как Система 5init). Управление службами, если оно вообще выполняется (, вместо того, чтобы просто отделять сервисные программы и в значительной степени забывать о них ), осуществляется другими программами в дочерних процессах.

    В отличие от systemdи набора инструментов nosh system-manager, он оставляет некоторые действия по управлению системой программам, работающим в дочерних процессах. Принимая во внимание, что и systemd, и system-managerвыполняют последний акт выключения/перезагрузки/остановки системы (, выполняя соответствующий системный вызов ядра )в процессе #1 (, хотя и в другой программе в systemd В случае )в системе ван Смуренбурга они выполняются в дочерних процессах, вызываемых через rc.Например, :Последний системный вызов, приводящий к остановке системы, выполняется с помощью haltсценария оболочки, запускаемого как дочерний процесс rc(, который сам является дочерним процессом #1 ), который в свою очередь запускает haltпрограмму(как пра-внука процесса #1 ), который фактически выполняет системный вызов.

Дополнительная литература

0
09.03.2021, 02:16
1 ответ

Это не будет работать в /bin/sh, переключитесь на /bin/bashи должно.

1
18.03.2021, 22:27

Теги

Похожие вопросы