Я просто задавался вопросом, например, когда я запускаюсь qtox
с:
qtox &
И затем закройте Терминал, qtox
соглашается с ним. Однако при выполнении etherape
использование:
sudo etherape &
Заключительный Терминал не закрывает или вызывает любую проблему к Etherape. И среди различных приложений существует другое поведение, немного близкие, когда Терминал делает, другие не делают, каким образом? Почему некоторые закрываются, когда другие не делают? Я выполняю Ubuntu GNOME 15.10 с GNOME 3.18.
Когда вы закрываете терминал, терминал отправляет сигнал SIGHUP на оболочку; оболочка, в свою очередь, отправляет сигнал SIGHUP всем дочерним группам процессов, которые включают фоновые группы процессов;
То, как каждый отдельный процесс будет реагировать на сигнал, полностью зависит от процесса: если процесс не ' t определить обработчик для сигнала и сообщить ядру (через некоторый системный вызов, такой как signal()
или sigaction()
), что оно желает обработать его, ядро выполняет обработчик по умолчанию для сигнала, который в случае сигнала SIGHUP состоит в прекращении процесса.
Однако, когда вы запускаете команду с sudo
, UID процесса sudo
и его дочернего процесса устанавливается на 0
(root); в общем, если UID процесса, отправляющего сигнал, не равен 0
(root) или совпадает с целевым процессом, ядро отклоняет сигнал (т. е. процесс не может отправлять сигналы процессу, принадлежащему другому пользователю, если процесс, отправляющий сигнал, не принадлежит root); Вот почему пользовательский процесс, такой как экземпляр Bash, запущенный терминалом, не может SIGHUP процесса sudo
и, в конечном итоге, закрытие терминала не влияет на процесс, запущенный с sudo
.