Применяется ли nohup только к дочернему процессу процесса оболочки, но не к дочернему процессу процесса без оболочки?

1

nohup - это внешняя программа. Как он может изменить действие SIGHUP дочерним процессом процесса оболочки, чтобы он «игнорировался»? (с точки зрения некоторых аргументов, когда дочерний процесс вызывает fork()и / или execve()в программе, которая следует за nohup?)

Применяется ли nohup только к дочернему процессу процесса оболочки, но не к дочернему процессу процесса без оболочки?

Благодарю.

Тим
источник
Сам по себе nohup - это дочерний процесс
frostschutz

Ответы:

4

nohupнастраивается на игнорирование SIGHUPсигнала; посмотрите, например, реализацию GNU . Спецификация POSIX дляnohup утверждает, что

Во время вызова указанной утилиты сигнал SIGHUP должен быть установлен так, чтобы он игнорировался.

Как также указано в POSIX , дочерние процессы наследуют игнорируемые сигналы, отличные от SIGCHLD, поэтому любой процесс, запущенный nohupпосле его игнорирования SIGHUP, сам будет игнорироваться SIGHUP.

nohupОбработка применяется к любому дочернему nohupэлементу независимо от nohupродительского процесса. nohupникак не ( и не может) влиять на то сигналы обрабатываются любым из его родителей, являются ли они или нет снарядов.

Стивен Китт
источник
Благодарю. «дочерние процессы наследуют игнорируемые сигналы, отличные от SIGCHLD, поэтому любой процесс, запущенный nohup после игнорирования SIGHUP, сам будет игнорировать SIGHUP». Это указано в качестве аргумента execve()?
Тим
Нет, именно так все execфункции указаны, во всех случаях. Там нет execаргумента, который вы можете использовать, чтобы изменить это.
Стивен Китт
Это так только для реализации nohup?
Тим
Я подозреваю, что это nohupбыло принято во внимание, когда была написана эта часть POSIX, но это было не единственное соображение; см. раздел обоснования execдля деталей.
Стивен Китт
Благодарю. Гуру Стивен, могу я обратить ваше внимание на unix.stackexchange.com/questions/484344/…
Тим