LINUX.ORG.RU

История изменений

Исправление Aber, (текущая версия) :

Что значит «команда будет продолжать выполняться в фоновом режиме и после того, как пользователь выйдет из системы»?

Когда ты закрываешь терминал ядро должно послать дочерним процессам сигнал HUP, процессы должны самостоятельно его отработать и завершить свою работу.

Это похоже на то как обрабатывается Ctrl+C, когда процессу посылается сигнал TERM, который можно послать явно выполнив kill -SIGTERM <pid>.

Процесс на принятый сигнал сам решает что делать. Конечно когда ты собираешь helloworld то компиллер добавит дефолтные обработчики по стандарту. Но ничего не мешает сделать свой кастомный обработчик. Например сервисы/демоны на сигнал HUP просто обновляют свою конфигурацию, т.е. ты обновил конфиг и хочешь чтоб он применился без перезапуска процесса, то можешь послать ему сигнал: kill -SIGHUP <pid> (разумеется это работает если это было предусмотрено, для nginx работает).

Только KILL не дает выбор процессу, kill -9 <pid> или kill -SIGKILL <pid> ядро завершит процесс принудительно.

По всему выше написанному должно стать понятно что nohup просто не передает сигнал HUP дочернему процессу.

Исходная версия Aber, :

Что значит «команда будет продолжать выполняться в фоновом режиме и после того, как пользователь выйдет из системы»?

Когда ты закрываешь терминал ядро должно послать дочерним процессам сигнал HUP, процессы должны самостоятельно его отработать и завершить свою работу.

Это похоже на то как обрабатывается Ctrl+C, когда процессу посылается сигнал TERM, который можно послать явно выполнив kill -SIGTERM <pid>.

Процесс на принятый сигнал сам решает что делать. Конечно когда ты собираешь helloworld то компиллер добавит дефолтные обработчики по стандарту. Но ничего не мешает сделать свой кастомный обработчик. Например сервисы/демоны на сигнал HUP просто обновляют свою конфигурацию, т.е. ты обновил конфиг и хочешь чтоб он примерился без перезапуска процесса, то можешь послать ему сигнал: kill -SIGHUP <pid> (разумеется это работает если это было предусмотрено, для nginx работает).

Только KILL не дает выбор процессу, kill -9 <pid> или kill -SIGKILL <pid> ядро завершит процесс принудительно.

По всему выше написанному должно стать понятно что nohup просто не передает сигнал HUP дочернему процессу.