Почему делают некоторые программы, работающие от Терминала с помощью '&', закрываются, когда Терминал делает и другие не делают?

Я просто задавался вопросом, например, когда я запускаюсь qtox с:

qtox &

И затем закройте Терминал, qtox соглашается с ним. Однако при выполнении etherape использование:

sudo etherape &

Заключительный Терминал не закрывает или вызывает любую проблему к Etherape. И среди различных приложений существует другое поведение, немного близкие, когда Терминал делает, другие не делают, каким образом? Почему некоторые закрываются, когда другие не делают? Я выполняю Ubuntu GNOME 15.10 с GNOME 3.18.

27
задан 30 November 2015 в 12:49

1 ответ

Когда вы закрываете терминал, терминал отправляет сигнал SIGHUP на оболочку; оболочка, в свою очередь, отправляет сигнал SIGHUP всем дочерним группам процессов, которые включают фоновые группы процессов;

То, как каждый отдельный процесс будет реагировать на сигнал, полностью зависит от процесса: если процесс не ' t определить обработчик для сигнала и сообщить ядру (через некоторый системный вызов, такой как signal() или sigaction() ), что оно желает обработать его, ядро ​​выполняет обработчик по умолчанию для сигнала, который в случае сигнала SIGHUP состоит в прекращении процесса.

Однако, когда вы запускаете команду с sudo, UID процесса sudo и его дочернего процесса устанавливается на 0 (root); в общем, если UID процесса, отправляющего сигнал, не равен 0 (root) или совпадает с целевым процессом, ядро ​​отклоняет сигнал (т. е. процесс не может отправлять сигналы процессу, принадлежащему другому пользователю, если процесс, отправляющий сигнал, не принадлежит root); Вот почему пользовательский процесс, такой как экземпляр Bash, запущенный терминалом, не может SIGHUP процесса sudo и, в конечном итоге, закрытие терминала не влияет на процесс, запущенный с sudo.

36
ответ дан 23 November 2019 в 01:05

Другие вопросы по тегам:

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