ToB企服应用市场:ToB评测及商务社交产业平台

标题: Linux下后台运行Java程序 [打印本页]

作者: 科技颠覆者    时间: 2023-8-30 15:22
标题: Linux下后台运行Java程序
1、背景描述

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


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


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


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

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

2.1、使用 &


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


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

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


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

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



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




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4