nohup - это внешняя программа. Как он может изменить действие SIGHUP дочерним процессом процесса оболочки, чтобы он «игнорировался»? (с точки зрения некоторых аргументов, когда дочерний процесс вызывает fork()
и / или execve()
в программе, которая следует за nohup?)
Применяется ли nohup только к дочернему процессу процесса оболочки, но не к дочернему процессу процесса без оболочки?
Благодарю.
Ответы:
nohup
настраивается на игнорированиеSIGHUP
сигнала; посмотрите, например, реализацию GNU . Спецификация POSIX дляnohup
утверждает, чтоКак также указано в POSIX , дочерние процессы наследуют игнорируемые сигналы, отличные от
SIGCHLD
, поэтому любой процесс, запущенныйnohup
после его игнорированияSIGHUP
, сам будет игнорироватьсяSIGHUP
.nohup
Обработка применяется к любому дочернемуnohup
элементу независимо отnohup
родительского процесса.nohup
никак не ( и не может) влиять на то сигналы обрабатываются любым из его родителей, являются ли они или нет снарядов.источник
execve()
?exec
функции указаны, во всех случаях. Там нетexec
аргумента, который вы можете использовать, чтобы изменить это.nohup
было принято во внимание, когда была написана эта часть POSIX, но это было не единственное соображение; см. раздел обоснованияexec
для деталей.