两者都不符合我的流程。Out & or myprocess。出&设置我的进程。在后台运行。关闭终端后,进程仍在运行。 它们之间有什么区别?
当前回答
大多数情况下,我们使用ssh登录远程服务器。如果你启动一个shell脚本,然后注销,那么这个进程就会被杀死。 Nohup帮助在退出shell后继续在后台运行脚本。
Nohup command name &
eg: nohup sh script.sh &
Nohup接收HUP信号。 Nohup不会自动把工作放在后台。我们需要使用&显式地告诉它
其他回答
大多数情况下,我们使用ssh登录远程服务器。如果你启动一个shell脚本,然后注销,那么这个进程就会被杀死。 Nohup帮助在退出shell后继续在后台运行脚本。
Nohup command name &
eg: nohup sh script.sh &
Nohup接收HUP信号。 Nohup不会自动把工作放在后台。我们需要使用&显式地告诉它
nohup捕获挂起信号(参见man 7信号),而&符号不捕获(除非shell以这种方式配置或根本不发送SIGHUP)。
正常情况下,当使用&运行命令并退出shell时,shell将用挂起信号(kill -SIGHUP <pid>)终止子命令。可以使用nohup来防止这种情况,因为它捕获信号并忽略它,因此它永远不会到达实际应用程序。
如果您正在使用bash,您可以使用命令shop | grep hupon来确定是否 你的shell是否发送SIGHUP给它的子进程。如果它是关闭的,进程将不会 终止了,就像你的情况一样。关于bash如何终止的更多信息 应用程序可以在这里找到。
在某些情况下,nohup不起作用,例如当您启动的进程重新连接时 SIGHUP信号,就像这里的情况一样。
如果我说错了,请指正
nohup myprocess.out &
Nohup捕获挂起信号,这意味着当终端关闭时它将发送一个进程。
myprocess.out &
进程可以运行,但是一旦终端关闭,进程就会停止。
nohup myprocess.out
即使终端关闭,进程也能运行,但你可以在终端中按ctrl + z来停止进程。如果&存在,Crt +z不工作。
在很多情况下,环境之间的微小差异会让你大吃一惊。这是我最近遇到的一个问题。这两个命令有什么区别?
1 ~ $ nohup myprocess.out &
2 ~ $ myprocess.out &
答案和往常一样——视情况而定。
Nohup捕获挂机信号,而&号则没有。
挂机信号是什么?
SIGHUP -在控制终端上检测到挂起或控制进程死亡(值:1)。
通常,当使用&运行命令并退出shell时,shell将使用挂起信号终止子命令(如kill -SIGHUP $PID)。可以使用nohup来防止这种情况,因为它捕获信号并忽略它,因此它永远不会到达实际应用程序。
好吧,但就像在这种情况下总是有“但是”。当shell配置为完全不发送SIGHUP时,这些启动方法之间没有区别。
如果你正在使用bash,你可以使用下面指定的命令来查看你的shell是否将SIGHUP发送给它的子进程:
~ $ shopt | grep hupon
此外,在某些情况下nohup不起作用。例如,当您启动的进程重新连接NOHUP信号时(这是在应用程序代码级别内部完成的)。
在上述案例中,在自定义服务启动脚本中,由于缺少差异,在没有nohup命令的情况下调用了第二个脚本来设置和启动适当的应用程序。
在一个Linux环境中,一切都很顺利,而在另一个环境中,当第二个脚本退出时,应用程序就退出了(检测这种情况,当然花费了我更多的时间,你可能会认为:stuck_out_tongue:)。
在将nohup作为启动方法添加到第二个脚本之后,即使脚本将退出,应用程序也会继续运行,并且这种行为在两个环境中都是一致的。
使用&号(&)将在子进程(当前bash会话的子进程)中运行该命令。但是,当您退出会话时,所有子进程将被杀死。
使用nohup + &(&)将完成同样的事情,除了会话结束时,子进程的父进程将被更改为“1”,即“init”进程,从而保护子进程不被杀死。
推荐文章
- 图形化对?
- 我如何能匹配一个字符串与正则表达式在Bash?
- 为什么cURL返回错误“(23)Failed writing body”?
- 在Unix shell中计算一列数字
- 在bash脚本中否定if条件
- 如何撤消“set -e”使bash立即退出,如果任何命令失败?
- 如何在docker映像的新容器中运行bash ?
- 管道命令输出到tee,但也保存退出代码的命令
- 如何自动添加用户帐户和密码与Bash脚本?
- 是否有方法按列“uniq”?
- 查找哪个进程被Linux OOM杀手杀死
- 如何在bash脚本中检查文件名的扩展名?
- 如何在Linux下将所有文件夹和文件重命名为小写?
- linux的图形化DIFF程序
- 使用bash的变量中第一个大写字符