首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“不承认-h`”和“`nohup`”有效地工作吗?

“不承认-h`”和“`nohup`”有效地工作吗?
EN

Unix & Linux用户
提问于 2018-11-26 19:48:50
回答 2查看 7.8K关注 0票数 24

disown

  • 导致shell在外壳终止时不会将SIGHUP发送到其不承认的作业,并且
  • 从shell的作业控件中移除不承认的作业。

第一个是第二个的结果吗?换句话说,如果从shell启动的进程被以任何方式从shell的作业控制中删除,那么当shell终止时,shell不会向进程发送SIGHUP吗?

disown -h仍然将进程保存在shell的作业控制下。这是否意味着disown -h使一个进程仍然接收从外壳发送的SIGHUP,但是将进程的SIGHUP的操作设置为“忽略”?这听起来类似于nohup

代码语言:javascript
复制
$ 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 -hnohup在使用终端时的差异,它们的工作效率是否相同?

谢谢。

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2018-11-26 20:05:31

nohupdisown -h并不完全一样。

使用disown,进程将从当前交互式shell中的作业列表中删除。启动后台进程和运行jobs后运行disown不会将该进程显示为shell中的作业。不承认的作业退出时不会从外壳接收到HUP (但请参阅尾注)。

使用disown -h时,作业不会从作业列表中删除,但是如果作业退出,shell将不会向其发送HUP信号(但请参阅最后注意事项)。

nohup实用程序忽略HUP信号并启动给定的实用程序。该实用程序从nohup继承信号掩码,因此也将忽略HUP信号。当shell终止时,该进程仍然是nohup的子进程(并且nohupinit的重子进程)。

区别在于,使用nohup启动的进程将忽略HUP,而不管谁发送信号。不承认的进程只是没有由外壳发送HUP信号,但是仍然可以从例如kill -s HUP 发送信号,并且不会忽略这一点。

请注意,只有在以下情况下才会将HUP发送到shell的作业

  • shell是一个登录shell,并且设置了huponexit shell选项,或者
  • 外壳本身接收到一个HUP信号。

bash手册中的相关bits (我的重点是):

默认情况下,upon接收 SIGHUP时发出信号表示shell退出。在退出之前,交互式shell将SIGHUP重新发送到所有作业,运行或停止。停止的作业被发送到SIGCONT,以确保它们接收到SIGHUP。为了防止shell向特定作业发送信号,应该从带有disown内置(参见下面的SHELL BUILTIN COMMANDS )的作业表中删除它,或者标记为不使用disown -h接收SIGHUPIf huponexit shell选项已用 shopt ** 、** bash sends a SIGHUP to设置,当交互登录外壳退出时,所有作业都会被设置。 没有选项的disown [-ar] [-h] [jobspec ... | pid ... ],从活动作业表中删除每个jobspec。如果给出了-h选项,则每个jobspec都从表中删除,但标记为SIGHUP is,如果外壳收到 SIGHUP,则不会发送到作业。

相关信息:

票数 25
EN

Unix & Linux用户

发布于 2018-11-26 20:17:07

They是不同的:

  • “不承认”从“活动作业”表中删除作业。然后继续当前的工作。使用-h,进程不发送SIGHUP。相反,当它接收到SIGHUP时,它将与包含它的shell一起死掉。
  • 没有忽略HUP。然后,任何通过进程关闭传递给终端的内容都会传递给文件nohup.out。nohup由POSIX定义,而不承认则不是。
票数 5
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/484276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档