双方nohup myprocess.out &
或myprocess.out &
设置myprocess.out在后台运行。 当我关闭终端,该进程仍在运行。 什么是它们之间的区别?
Answer 1:
nohup
捕捉挂断信号(见man 7 signal
),而符号没有(除了外壳confgured这样或不发送SIGHUP
在所有)。
通常情况下,使用运行命令时&
事后离开外壳,壳将终止与挂起信号的子命令( kill -SIGHUP <pid>
这可以使用能够防止nohup
,因为它捕获的信号,并忽略它,使得它永远不会达到实际应用。
如果你正在使用bash,您可以使用命令shopt | grep hupon
shopt | grep hupon
找出你的shell是否发送SIGHUP给其子进程与否。 如果处于关闭状态,进程不会被终止,因为它似乎是你的情况。 在庆典结束如何应用的更多信息,可以发现在这里 。
在有些情况下案件nohup
不工作,例如,当您启动过程重新连接SIGHUP
信号,因为它是如此这里 。
Answer 2:
myprocess.out &
将运行使用一个子shell后台进程。 如果当前的外壳被终止(注销通过说),所有子shell也因此终止后台进程也将被终止。 的nohup的命令忽略HUP
信号,因此,即使当前壳被终止,子外壳和所述myprocess.out将继续在后台运行。 另一个区别在于, &
单独不重定向标准输出/ stderr的,所以如果有任何输出或错误,那些显示在终端上。 nohup的,另一方面重定向标准输出/标准错误到的nohup.out或$ HOME /的nohup.out。
Answer 3:
大多数时候,我们登录到远程服务器使用ssh。 如果你启动一个shell脚本,您注销然后进程被杀死。 NOHUP有助于继续运行在后台的脚本,你从外壳注销后还是一样。
Nohup command name &
eg: nohup sh script.sh &
NOHUP捕捉HUP信号。 NOHUP不会自动把工作的背景。 我们需要告诉明确使用&
Answer 4:
使用&(&)将运行在一个子进程的命令(孩子当前的bash会话)。 但是,当您退出会话,所有子进程会被杀死。
使用nohup的+号(&)会做同样的事情,但在会话结束时,子进程的父将改为“1”,这是“初始化”的过程,从而保护了被杀死的孩子。
Answer 5:
如我错了请纠正我
nohup myprocess.out &
nohup的捕获挂起信号,这意味着当终端关闭它将发送一个过程。
myprocess.out &
流程可以运行,但一旦终端结束后就会停止。
nohup myprocess.out
流程能够运行,即使终端关闭,但你可以通过按下停止进程ctrl
+ z
在终端。 Crt
+ z
如果没有工作&
被现有的。
Answer 6:
nohup命令是一个信号掩蔽效用和捕捉挂起信号。 凡为符号不赶挂断信号。 使用&和离开外壳中运行的命令时,将外壳终止与挂断信号子命令。 这可以通过使用nohup的,因为它捕获信号来防止。 nohup命令接受挂断它可以由内核被发送到一个进程和阻断它们的信号。 nohup命令是当用户想要开始长期运行的应用程序注销或关闭该进程启动的窗口中有帮助的。 无论这些行动通常提示内核挂断上的应用程序,但nohup的包装将使这个进程继续下去。 使用&将运行在一个子进程的命令,这孩子当前的bash会话。 当您退出会话,所有该进程的子进程会被杀死。 与号涉及一种用于有源壳作业控制。 这是在后台会话中运行的进程有用。