1

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

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

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

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

2 ответа2

2

Вы можете использовать команду disown если вы используете Bash.

От man bash:

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

1

Как говорит Деннис, в bash вы можете использовать disown, чтобы работа не получала SIGHUP при закрытии bash. Кстати, вы также можете получить поведение «not send SIGHUP», если вы запустите его с setsid не просто nohup . setsid обладает тем преимуществом, что не портит stdout и stderr, как это делает nohup .

Небольшая очистка вашего вопроса, хотя:

Насколько я понимаю, что программа, связанная с терминалом BASH

Не только bash, но и ksh и zsh уничтожают дочерние процессы с помощью SIGHUP, когда оболочки также закрыты. Это довольно стандартно для всех оболочек. Мне лень проводить реальные исследования и говорить «все», но я вполне уверен, что они все это делают.

BASH терминал

Не терминал bash, а оболочка bash. Терминал, эмулятор терминала, это окно. Bash shell работает внутри него.

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .