Linux下后台运行Java程序

科技颠覆者  金牌会员 | 2023-8-30 15:22:10 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 933|帖子 933|积分 2799

1、背景描述

用Java编写了一个程序(可执行的jar),需要在Linux中启动并持续运行
1.1、直接执行程序


直接执行程序后,在程序执行期间,无法在当前会话中再执行其他操作
1.2、直接执行程序后中断


直接执行程序后,按Ctrl+C中断;这时虽然可以在当前会话中执行其他操作,但是程序也结束运行了
1.3、直接执行程序后开启新会话


直接执行程序后,在新会话中不仅可以执行其他操作,而且旧会话中的程序也还在持续运行

但是,把旧会话关闭后,程序也随之结束了
2、解决方式

2.1、使用 &


  • & :表示程序在后台运行,这样就可以在程序的执行期间,还能在当前会话中执行其他操作
  • 使用格式:command &

注意:
在执行程序的命令后使用 > test.log 的作用,是为了将程序的输出信息从标准输出重定向到(test.log)文件中
单独使用 & , 只能实现在程序的执行期间,还能在当前会话中执行其他操作;但关闭当前会话,程序依然会自动结束
  1. java -jar test_script.jar > test.log &
复制代码
2.2、使用 nohup


  • nohup:英文全称 no hang up ,用于在系统中不挂断地运行命令,即使退出终端也不会影响程序的运行
  • 使用格式:nohup command

注意:
单独使用 nohup ,只能实现关闭当前会话后,程序依然能继续运行,但无法在当前会话中再执行其他操作;
强行使用Ctrl+C中断的话,这时虽然可以在当前会话中执行其他操作,但是程序也结束运行了
nohup 会默认将程序的输出信息从标准输出重定向到当前目录的nohup.out文件中;
因此可以不用额外使用 > test.log 将程序的输出信息从标准输出重定向到(test.log)文件中
  1. nohup java -jar test_script.jar
复制代码
2.3、结合使用 nohup 和 &

单独使用 & , 只能实现在程序的执行期间,还能在当前会话中执行其他操作;但关闭当前会话,程序依然会自动结束
单独使用 nohup ,只能实现关闭当前会话后,程序依然能继续运行,但无法在当前会话中再执行其他操作
结合使用 nohup 和 & ,能同时实现:在程序的执行期间,还能在当前会话中执行其他操作;关闭当前会话后,程序依然能继续运行


  • 结合使用格式:nohup command &

结合使用 nohup 和 & 后,无论是按回车,还是按Ctrl+C,或者是关闭当前会话,都不影响程序的运行
  1. nohup java -jar test_script.jar &
复制代码
3、扩展知识

当结合使用 nohup 和 & 执行程序后,要么程序执行完毕后自动结束(如果程序有结束条件),要么手动结束该进程


  • ps -aux | grep 程序名:通过程序名找到进程信息
  • kill -9 进程ID:通过进程ID结束进程


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

科技颠覆者

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表