侧边栏壁纸
博主头像
孔子说JAVA博主等级

成功只是一只沦落在鸡窝里的鹰,成功永远属于自信且有毅力的人!

  • 累计撰写 297 篇文章
  • 累计创建 134 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

Linux下使用 nohup 命令在后台运行jar包的几种方式

孔子说JAVA
2022-05-24 / 0 评论 / 0 点赞 / 185 阅读 / 1,900 字 / 正在检测是否收录...

nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。在默认情况下(非重定向时),执行 nohup 命令会输出一个名叫 nohup.out 的文件到当前目录下,如果当前目录的 nohup.out 文件不可写,输出将重定向到 $HOME/nohup.out 文件中。

1、nohup语法

语法格式如下:

nohup Command [ Arg … ] [ & ]

参数说明:

  • Command:要执行的命令。
  • Arg:一些参数,可以指定输出文件。
  • &:让命令在后台执行,终端退出后命令仍旧执行,不会随终端而退出。

实例

以下命令在后台执行 root 目录下的 runbash.sh 脚本:

nohup /root/runbash.sh &

2、linux下运行jar包的几种方式

2.1 方式一:前台执行jar包,锁定SSH窗口

java -jar XXX.jar

特点: 当前ssh窗口被锁定,可按 CTRL + C 打断程序运行,或直接关闭窗口,程序退出。即窗口和当前执行的jar包时锁定关系,当前窗口退出时jar包对应的java进程也会结束。

2.2 方式二:后台执行jar包,不锁定SSH窗口

java -jar XXX.jar &

特点: 该命令和方式一相比多了个 && 代表程序在后台运行。当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行。那么,有没有方法让窗口关闭时,程序仍然运行?我们继续往下看。

2.3 方式三:后台执行jar包,不挂断运行命令

nohup java -jar XXX.jar &

特点: 该命令和方式二相比在语句前面多了个 nohupnohup 意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行。当用 nohup 命令执行作业时,缺省情况下该作业的所有输出被重定向到 nohup.out 的文件中,除非另外指定了输出文件。

2.4 方式四:后台执行jar包,不挂断运行命令同时指定输出文件

nohup java -jar XXX.jar >temp.txt &

解释下 >temp.txt,将command(即前面的java命令)的输出重定向到 temp.txt 文件,即输出内容不打印到屏幕上,而是输出到 temp.txt 文件中。

以上4种方式层层推进,详细介绍了命令行中各参数的作用,方便我们根据实际场景做出正确的选择。

3、如何结束nohup方式运行的程序/进程

上述方式一和二,使用ctrl+z或关闭terminal/shell窗口时,程序/进程即会终止执行。而方式三和四中使用了nohup命令,程序在后台运行,关闭terminal/shell窗口时,程序仍旧在执行中,需使用kill命令终止该进程。

3.1 jobs命令查看进程kill终止进程

使用 jobs -l 命令会列出所有后台执行的作业/后台进程,并且每个作业前面都有个编号。jobs命令只能看当前终端生效的,关闭终端后,在另一个终端中jobs已经无法看到后台跑的程序了,此时需要使用 ps命令(进程查看命令)。

image-1653295665516

上图输出结果中,输出信息的第一列表示任务编号,第二列表示任务所对应的进程号,第三列表示任务的运行状态,第四列表示启动任务的命令。

  • 如果想将某个作业调回前台控制,只需要 fg + 编号即可。

根据上图可以看到pid为7585,执行 kill 7585 结束该进程。

jobs命令示例:

$ ./test10.sh > testout
^Z
[1]+  Stopped                 ./test10.sh > testout

# 查看当前作业
$ jobs
[1]+  Stopped                 ./test10.sh > testout

# -l,列出进程的PID和作业号
$ jobs -l
[1]+ 96267 Suspended: 18           ./test10.sh > testout

# -p,只列出作业的PID
$ jobs -p
96267

# -s,只列出停止的作业
$ jobs -s
[1]+  Stopped                 ./test10.sh > testout

# -r,只列出运行的作业
$ jobs -r

$ jobs -l
[1]+ 96267 Suspended: 18           ./test10.sh > testout
[3]- 96292 Done                    ./test10.sh > testb

3.2 ps命令查看进程kill终止进程

  1. 首先要找到进程对应的 pid,我们可以使用 ps 命令。
ps aux | grep runbash.sh 

或者使用以下命令:

ps -ef | grep java

通过上述命令查找到 nohup 运行脚本 runbash.sh 后生成的进程的 PID,然后可以使用 kill 命令来删除。

  1. 找到 PID 后,就可以使用 kill PID 命令来删除了。
kill -9  进程号PID
0

评论区