nohub command & 和 nohub command 的区别

来源:互联网 发布:淘宝微淘官网登陆首页 编辑:程序博客网 时间:2024/05/28 01:36

先说说nohub :nohub的意思就是忽略发来的SIGHUB信号。

再说说&: 在命令后面加&代表放入后台执行,当前shell立即返回,不等待子进程的执行结果。

有人会说了,我加上&执行以后,在退出当前shell,子进程依然在执行(变成了孤儿程序  orphan process),为什么需要这个nohub呢。


如果你用的是bash,bash有个选项nohuponexit。这个值默认是 false。意思是说当你交互式shell退出的时候不发送SIGHUB信号给jobs (通过&执行的命令算job)

这个值可以被修改 :shopt -s nohuponexit.(把这个选项修改成on)

也就是说,如果你的bash 选项nohuponexit 为false,那么当shell 退出的时候,不会给他的jobs发送SIGHUB信号,所以子进程依然可以执行,只是成了孤儿程序,被Init程序领养。

如果你的bash 选项nohuponexit 为treu,那么对不起了,即使你的命令是通过&执行的,照样会被毫不留情的关闭。(除非你运行的程序本身就是忽略SIGHUB信号的)

这也就是nohub的作用了。加了nohub命令以后,及时nohuponexit的值为true,当shell退出的时候,子进程依然可以继续运行。


ps:

查看bash的选项命令

root#shopt

启用选项

root#shopt -s  选项

禁用选项

root#shopt -u 选项

ps:直接关闭终端和exit会话是不一样的 ,直接关闭终端jobs会受到hup信号。


参考:http://serverfault.com/questions/115999/if-i-launch-a-background-process-and-then-log-out-will-it-continue-to-run

0 0
原创粉丝点击