Как работает nohup?

8

Насколько я понимаю, для того, чтобы блокировать сигнал процесса, как SIGHUP, вы должны сделать это из процесса, в который сигнал отправляется. Тем не менее, подобная оболочке Unix bashможет порождать дочерний процесс и блокировать HUPсигнал для ребенка изнутри родительского процесса, используя nohupкоманду. Как это работает? Блокирует ли nohupсигнал и затем выполняет дочерний процесс без разветвления? Это единственный способ, о котором я могу думать.

user628544
источник

Ответы:

7

Вы можете взглянуть на исходный код реализации nohup, например , coreutilsверсии GNU . Существует множество настроек, некоторые из которых предназначены для целей интернационализации, а остальные - для обработки различных вариантов перенаправления; тогда происходит фактическое nohupping:

  signal (SIGHUP, SIG_IGN);

  char **cmd = argv + optind;
  execvp (*cmd, cmd);

Как вы предполагаете, это настраивает процесс на игнорирование сигнала HUP, а затем execзапрашиваемой команды.

Стивен Китт
источник
-2

Акт использования nohupпросто изменяет PPID порожденного процесса на 1 (init), так что при выходе из оболочки он больше не является дочерним процессом этой оболочки и поэтому не получает HUP.

РЕДАКТИРОВАТЬ: Должен думать больше, прежде чем я публикую иногда Оставив это здесь, чтобы напомнить мне о моем стыде :-(

Неверующий
источник