disown
导致shell在终止时不将SIGHUP发送到其未完成的工作,并且
从Shell的作业控件中删除不相关的作业。
第一个是第二个的结果吗?换句话说,如果以某种方式从外壳启动的进程从外壳的作业控件中删除了,那么在外壳终止时外壳将不会将SIGHUP发送给该进程吗?
disown -h
仍然将进程保持在Shell的作业控制之下。这是否意味着disown -h
使进程仍然接收从外壳发送的SIGHUP,但是将进程设置为SIGHUP的动作是“忽略”?听起来类似于nohup
。
$ sleep 123 & disown -h
[1] 26103
$ jobs
[1]+ Running sleep 123 &
$ fg 1
sleep 123
$ ^Z
[1]+ Stopped sleep 125
$ bg 1
[1]+ sleep 123 &
$ exit
$ ps aux | grep sleep
t 26103 0.0 0.0 14584 824 ? S 15:19 0:00 sleep 123
做disown -h
与nohup
工作实际上是一样的,如果我们无视他们在使用终端的区别?
谢谢。
nohup
,则需要自己将stdin / stdout / stderr重定向为远离TTY(如果您的原始外壳连接到其中)。(OTOH,实际上,我认为这种方法比依赖于令人讨厌的硬编码默认值更好./nohup.out
)。