2014-10-27 3 views
2

Я реализую базовую оболочку на основе Unix. Оболочка поддерживает список дочерних процессов, выполняющихся в фоновом режиме и остановленных процессах.По умолчанию поведение оболочки Unix относительно дочерних процессов при выходе?

Если оболочка вышли:

  • убить ли оболочка всех дочерних процессов, запущенных/остановленных в фоновом режиме?

Или

  • ли оболочка просто игнорировать дочерние процессы, существующие в фоновом режиме или в остановленном состоянии, только чтобы быть позже принят INIT?

Обратите внимание, что мне нужно знать точное поведение оболочек Unix. Я нашел ответ here, но все же он не говорит о точной реализации оболочек Unix.

ответ

1

Подробнее о сигнале SIGHUP. Этот сигнал обычно отправляется всем процессам в группе процессов всякий раз, когда их управляющий терминал выходит. В случае оболочки это обычно происходит, когда оконное окно закрывается. Поведение сигнала по умолчанию заключается в прекращении процесса. Вот почему существуют такие программы, как nohup.

Чтобы написать реальную оболочку, вам действительно нужно понять всю подсистему TTY и то, как связаны сигналы. Рекомендуемая статья: "The TTY Demystified".

+1

Я думаю, вы обнаружите, что ядро ​​отправляет процесс SIGHUP всем процессам в группе процессов, имеющей терминал в качестве управляющего терминала или около того. Это сложная область, с большим количеством терминологии для освоения. –

0

На самом деле SIGHUP (номер сигнала 1 (для проверки kill -l)) является сигналом, который используется, чтобы закрыть все процессы (можно сказать, дети), которые работают под управлением терминала, отправив этот сигнал с помощью этого терминала ко всем процессам.

The SIGHUP signal is sent to a process when its controlling terminal is closed. It was 
originally designed to notify the process of a serial line drop (a hangup). In modern 
systems, this signal usually means that the controlling pseudo or virtual terminal has 
been closed.Many daemons will reload their configuration files and reopen their 
logfiles instead of exiting when receiving this signal.nohup is a command to make a 
command ignore the signal. 
Смежные вопросы