Фоновый процесс и SIGHUP

Мое понимание - то, что программа, которая связана с терминалом Bash, получит сигнал SIGHUP, если тот терминал будет закрыт. Это обычно будет завершать программу.

Я также знаю, что можно использовать nohup команда наряду с & символ, чтобы запустить программу в фоновом режиме и разъединить его с терминалом так, чтобы программа не была завершена, когда терминал закрывается (на выходят из системы.)

Однако предположите, что программа обычно запускается без nohup, но затем приостановлен с помощью Cntl-Z. Если программа затем возобновляется в фоновом режиме с помощью bg управляйте, это получит сигнал SIGHUP на, выходят из системы?

Или помещать его иначе: если у меня есть программа, которая уже работает, и я не хочу останавливать ее, но я хотел бы выйти из системы, могу я приостанавливать ее с помощью Cntl-Z и выполните ее в фоновом режиме использование bg? Или программа будет завершена, когда я выйду из системы?

1
задан 08.01.2011, 02:04

2 ответа

Можно использовать disown управляйте, используете ли Вы Bash.

От man bash:

Если-h опция дана, каждый jobspec не удален из таблицы, но отмечен так, чтобы SIGHUP не был отправлен в задание, если оболочка получает SIGHUP.

2
ответ дан 12.12.2019, 10:37

Как Dennis говорит в ударе, который можно использовать, отрицают, чтобы заставить задание не получить SIGHUP, когда Вы закрываете удар. BTW: можно также добраться, 'не отправляют SIGHUP' поведение, если Вы выполняете его с setsid не просто nohup. setsid имеет преимущество не питания с stdout и stderr как nohup делает.

Некоторая незначительная очистка Вашего вопроса tho:

Мое понимание - то, что программа, которая связана с терминалом Bash

Не только колотят, но и ksh и zsh уничтожают дочерние процессы с SIGHUP, когда оболочки закрываются также. Это довольно стандартно через оболочки. Я слишком ленив, чтобы провести реальное исследование и сказать, что 'все' делают это, но я довольно в безопасности в предположении, что они все делают.

Терминал Bash

Не колотят терминал, но оболочку удара. Терминал, хорошо эмулятор терминала, является окном. Оболочка Bash работает в нем.

получит сигнал SIGHUP, если тот терминал будет закрыт. Это обычно будет завершать программу.

Да, по умолчанию Вы будете завершены при получении SIGHUP. Любое приложение может, принял решение проигнорировать это (затем, ничего не происходит), или может поймать сигнал и сделать что-то - регистрируют его, моются, безотносительно. Процессы демона как веб-серверы обычно ловят это и используют его в качестве индикатора для перечитывания конфигурационных файлов.

1
ответ дан 12.12.2019, 10:37

Теги

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