关闭shell后让程序继续运行的方式
关闭shell后让程序继续运行的方式 最近在Linux下执行了jmeter测试脚本,启动程序后,关闭shell后,然后再登录shell,发现启动的脚本停止了,莫名其妙。原来,如果直接执行脚本,当关闭shell时,启动的脚本进程也跟着结束了。 原因:当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程。 解决办法:要么让进程忽略HUP信号,...
关闭shell后让程序继续运行的方式
最近在Linux下执行了jmeter测试脚本,启动程序后,关闭shell后,然后再登录shell,发现启动的脚本停止了,莫名其妙。原来,如果直接执行脚本,当关闭shell时,启动的脚本进程也跟着结束了。
原因:当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程。
解决办法:要么让进程忽略HUP信号,要么让进程运行在新的会话里从而成为不属于此终端的子进程。
nohup和&方式
nohup 的用途就是让提交的命令忽略** HUP(hangup)** 信号,即忽略掉挂起信号 ;通过nohup --help
命令查看基本介绍:
nohup
的使用比较简单,只需在命令前加上nohup
就可以了,标准输出和标准错误缺省会被重定向到 nohup.out
文件中;但是一般可在结尾加上&
来将命令同时放入后台运行,还可以添加输出的重定向到指定的文件。
示例:
# xxx.sh是你要执行的命令 > log.txt表示添加输出的重定向到log.txt文件
# 2>&1 标准输出和标准错误信息 &后台运行
[root@izwz9938t1plpkmgu0gexcz ~]# nohup xxx.sh > log.txt 2>&1 &
disown命令
用于命令已经在执行中的情况,但是并没有忽略挂起信号的方式,通过disown
命令可以避免 HUP 信号的影响。通过ctrl+z
将程序挂起到后台暂停运行,然后执行其他操作。分两种情况,一种是进程已经使用&
放到后台运行了的(无需ctrl+z),另外一种是前台运行的情况,即没有使用&
(需要ctrl+z).
使用了&的情况示例
[root@izwz9938t1plpkmgu0gexcz ~]# ping www.baidu.com > ping.txt &
[1] 316
#通过jobs可以查看被挂起的工作进程
[root@izwz9938t1plpkmgu0gexcz ~]# jobs
[1]+ Running ping www.baidu.com > ping.txt &
# 使得进程忽略HUP信号,disown -h %1 %1:指的是上面的job号,对应1(第一个作业).
[root@izwz9938t1plpkmgu0gexcz ~]# disown -h %1
# 然后logout后,再次登录进去进程依然还在。
未使用&的情况示例
[root@izwz9938t1plpkmgu0gexcz ~]# ping www.baidu.com > ping.txt
#按ctrl+z后,通过jobs可以查看被挂起的工作进程
[root@izwz9938t1plpkmgu0gexcz ~]# jobs
[1]+ Stopped ping www.baidu.com > log.txt
# bg %1将进程放到后台运行
[root@izwz9938t1plpkmgu0gexcz ~]# bg %1
[1]+ ping www.baidu.com > log.txt &
# 使得进程忽略HUP信号,disown -h %1 %1:指的是上面的job号,对应1(第一个作业).
[root@izwz9938t1plpkmgu0gexcz ~]# disown -h %1
# 然后logout后,再次登录进去进程依然还在。
更多推荐
所有评论(0)