bash
, zsh
и ksh93
оболочки, которые имеют a disown
команда. Из этих трех, bash
единственный, который поддерживает a h
опция. Без -h
это emultates zsh
поведение (удаляют из таблицы задания), в то время как с -h
это эмулирует ksh93
поведение (не отправит ему SIGHUP на выход, но не удаляет его из таблицы задания, таким образом, Вы можете все еще bg
или fg
или уничтожьте его).
Вы могли эмулировать то поведение с zsh путем выполнения:
typeset -A nohup
trap 'disown %${(k)^nohup}' EXIT
trap 'for i (${(k)nohup}) (($+jobstate[i])) || unset "nohup[$i]"' CHLD
Таким образом, nohup ассоциативный массив содержит список заданий, которые не должны быть отправлены SIGHUP на выход. Так, вместо disown -h %1
, Вы записали бы nohup[1]=
.
См. также setopt nohup
не отправить SIGHUP в любое задание на выход.
disown
самостоятельно достаточно, чтобы позволить программе продолжать бегать за Вами разъединение:
$ command_running_forever
^Z
zsh: suspended command_running_forever
$ bg
[1] + continued command_running_forever
$ jobs
[1] + running command_running_forever
$ disown %1
$ logout
disown -h
использует аргумент удара, который заставляет задание оставаться на таблице задания и не получает SIGHUP, когда удар получает SIGHUP (согласно удару help disown
). Этот аргумент не доступен с zsh.
%1
в Вашем примере и ответе @mrb? Я думаю всего "1", отдельно работал (как в,disown 1
) когда я попробовал его. Во-вторых, опция, к которой Вы обращаетесьNO_HUP
? Я нашелHUP
вzshoptions
страница справочника, и я предполагаю, что можно лавировать наNO_
выключить материал? – Coderer 30.11.2012, 10:28%
для спецификаций задания. Это не нужно дляfg
,bg
илиdisown
, но дляkill
, таким образом, я выработал привычку использования его каждый раз, когда я обращаюсь к заданию в противоположность идентификатору процесса. Даsetopt noopt
совпадает сunsetopt opt
и символы нижнего подчеркивания проигнорированы. Это документируется. – Stéphane Chazelas 30.11.2012, 12:44