linux 退出命令行继续运行程序,Linux运维之关闭终端,程序后台运行的5种方法

Java 项目使用 jar 包发布时,一般会执行远程执行 java -jar xxx.jar。此时命令行会输出 jar 包执行的日志,但 shell 会被阻塞,没有办法执行其他指令。强行 Ctrl + Z 退出后,jar 包进程还在,但被挂起了,前端 web 访问一直在等待。

怎么样才能让 jar 包进程后台运行呢?有以下5种方法:

nohup

最常用的命令就是【nohup】,从名字就看出是否挂起运行命令,关闭终端或者退出某个账号,进程也继续保持运行状态,同样要配合【&】符号一起使用。

用法:nohup Command [ Arg … ] [ & ]

示例:nohup java -jar xxx.jar &

[notice]注意:nohup 指令末尾是有 '&' 符号的,丢失指令无效。[/notice]

setsid

nohup是忽略 SIGHUP 信号,setip 命令可以重新打开了会话,继承了父进程组的 ID,脱离了父进程的控制。

用法:setsid Command [ Arg … ]

示例:setsid java -jar xxx.jar

setsid 和 nohup 还有一个区别是,不需要使用 & 后台符号。

exit

使用 exit 命令退出终端,我们的程序还是会继续运行,这是为什么呢?

这是因为使用 exit 命令退出终端时不会向终端所属任务发 SIGHUP 信号,是 huponexit 配置项控制的,默认是 off,可以使用shopt 命令查看。> shopt | grep huponexit

huponexit off

# 开启 exit 挂起进程

> shopt -s huponexit

> shopt | grep huponexit

huponexit on

trap

trap 命令 linux 内置的命令,接收到指定信号时将要采取的行动,后是要处理的信号名,常见的信号如下:信号值描述1SIGHUP挂起进程

2SIGINT终止进程

3SIGQUIT停止进程

9SIGKILL无条件终止进程

15SIGTERM尽可能终止进程

17SIGSTOP无条件停止进程,但不终止进程

18SIGSTP停止或暂停进程,但不终止进程

19SIGCONT继续运行停止的进程

当一个脚本要后台,同样不希望终端退出而关闭程序,我们可以在的脚本中增加trap命令,来忽略SIGHUP信号(挂起进程)。#!/bin/sh

trap "" HUP

while true;do

date >> /root/test.txt

sleep 1

done

screen

Linux screen 命令用于多重视窗管理程序,它可以创建一个终端,让程序在里面运行。screen sh test.sh &

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值