nohup:在linux后台运行程序

image.png

nohup:在linux后台运行程序

今天在工作中,lz要在Linux系统上运行一个java程序,这个程序要在系统中持续运行。随后lz无意将ssh窗口关掉了,发现java程序停止了。原来,当使用ssh连接到系统运行程序的时候,该程序已经和你的ssh连接绑定了。如果你关闭连接,该程序就会停止。还有一个情景:如果要在后台运行多个java程序的时候,就需要启动多个ssh窗口,这样很麻烦。有没有方法来解决这个问题呢?答案是肯定的。

1.使用nohup来执行命令,它会把命令自动调到linux后台运行,不锁定当前ssh窗口,也不会被ctrl + c,alt + F4之类打断程序的动行。

1
nohup java -jar test.jar &

执行完该命令后,终端会显示如下信息:

1
2
[1] 27945
nohup: 忽略输入并把输出追加到"nohup.out"

[1]:该后台任务的jobid
27945:是该进程的pid
nohup.out:是该任务的输出位置

2.要指定重定向的文件,如下:

1
nohup java -jar test.jar > test.log 2>&1 &

3.如果一个任务已经在前台执行,那就使用以下方法来将任务调整到后台:

(1)首先,在正在执行任务的终端使用ctrl+z

1
[1]+  已停止               java -jar test.jar

(2)使用bg命令将该任务调整至后台(fg与之相反,将后台任务调整至前台)

1
bg %1(1是jobid)

如果不知道jobid,也可以使用jobs命令来查询。

但是任务的输出还是会打印到终端上的(具体怎么将输出重定向到别的地方,lz也不造)。而且,这时该任务还是与当前终端相关联的,关闭终端还是会断掉该任务的。使用下面命令来解决:

1
disown -h %1

这样再也不用担心关掉终端会停止掉任务喽!!!

PS:再来说说nohup吧。nohup的意思是no hang up,就是说关掉终端是不会挂掉程序的。如果开始执行命令时只使用&:

1
java -jar test.jar &

那么该任务也会在后台执行,但是一旦关掉终端该任务还是会挂掉,所以这就是nohup的用处了。

原文链接

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×