文档章节

服务器上如何更保险的启动普通java进程

zgw06629
 zgw06629
发布于 2015/04/29 19:20
字数 479
阅读 90
收藏 0

在服务器上启动普通java进程时(非web服务器) 以后台方式运行,命令一般是这样,如:

java com.company.XXX &

但偶尔会有这种情况,前一晚启动的进程,第二天去服务器上看时发现却没有相关进程存在。

作为一个无神论者,当然不相信是见鬼了。 咨询运维同事得知应该是退出SSH终端导致。

任务在什么情况下会被无故干掉呢?你退出终端的时候就会。因为Linux下任务是与操作者终端关联的,只要你退出了终端,与其关联的所有任务都会被干掉。

(摘自Linux就是这个范儿 P62)

如下所示:

$ java WaitForever &
[1] 8951
$ jps -l
8951 WaitForever
9001 sun.tools.jps.Jps
#通过ctrl+shift+w方式关闭终端
#再新开启一个终端(ctrl+shift+t)
#在新终端中 进程已经不在了
$ jps -l
9523 sun.tools.jps.Jps

但若显式执行exit退出终端的话,可以避免上述问题。如下所示:

$ java WaitForever &
[1] 10603
$ jps -l
10626 sun.tools.jps.Jps
10603 WaitForever
$ exit
#新开启一个终端 
$ jps -l
10885 sun.tools.jps.Jps
10603 WaitForever


当然可以用更保险的启动进程方式,即使用nohup, 它能保证被它启动的任务脱离与终端的关联。如下所示:

$ nohup java WaitForever &
[1] 11895
nohup: ignoring input and appending output to ‘nohup.out’
$ jps -l
11936 sun.tools.jps.Jps
11895 WaitForever
#使用ctrl+shift+w关闭终端
#新开启一个终端 进程还在
$ jps -l
11895 WaitForever
12574 sun.tools.jps.Jps

需要注意,命令的所有输出都会输出到nohup.out这个文件中。

补充:

还可以利用screen,如:

screen -dmLS processName com.company.XXX

这时相当于开启了一个新的会话来启动该java进程。


参考文档:

《Linux 就是这个范儿》2.4.1 执行程序的方法,以及多任务协调机制

screen 介绍:

http://www.ibm.com/developerworks/cn/linux/l-cn-screen/


© 著作权归作者所有

共有 人打赏支持
zgw06629
粉丝 16
博文 54
码字总数 30471
作品 0
海淀
程序员
私信 提问
关于 Java 性能监控您不知道的 5 件事

当应用程序性能受到损害时,大多数开发人员都惊慌失措,这在情理之中。跟踪 Java 应用程序瓶颈来源一直以来都是很麻烦的,因为 Java 虚拟机有黑盒效应,而且 Java 平台分析工具一贯就有缺陷。...

红薯
2010/08/22
859
5
static变量的线程间共享,进程间不共享

JAVA中通常我们会使用static域变量来在内存中缓存数据或长驻内存数据,众所周知 ,static是类的所有实例所共享. 考虑一个问题,假如在多线程情况下,共享数据肯定会有危险的, 例如使用Simpl...

cjun1990
2014/12/29
0
0
Java 学习(27)---(多线程 / Runnable 接口 / 调度和优先级)

多线程 1 .概念 多线程:一个应用程序有多条执行路径进程:正在执行的应用程序 线程:进程的执行单元,执行路径 单线程:一个应用程序只有一条执行路径 多线程:一个应用程序有多条执行路径 ...

姜白告
2018/08/03
0
0
Gradle学习(九)——构建环境

转载请注明出处:http://blog.csdn.net/lastsweetop/article/details/78914742 通过gradle.properties配置构建环境 为了更容易的配置用于构建的java进程,Gradle提供了几个选项。你可以在本地...

lastsweetop
2017/12/27
0
0
使用 JDK 6 中的 JConsole 监控应用

其实在 JDK 5 中已经新加入了这个功能了. 现在的 JDK 已经内置了对 VM 的监控功能. JDK 6 中这个工具变的更加好用了. 关于 JDK 5 中如何使用这个工具可以参考这里: http://java.sun.com/dev...

红薯
2010/04/11
2.7K
3

没有更多内容

加载失败,请刷新页面

加载更多

centos7安装RabbitMQ详细过程

由于RabbitMQ是基于Erlang语言开发,所以在安装RabbitMQ之前,需要先安装Erlang 1、环境: centos 7.1 内核版本3.10.0-229.el7.x86_64 Erlang 19.0.4版本 RabbitMQ 3.6.14版本 2、在线安装E...

秋至丶枫以落
10分钟前
0
0
6个使用KeePassX保护密码的技巧

虽然安全是个深奥的主题,但是你可以遵循几个简单的日常习惯来减小攻击面。本文将解释确保密码信息安全的重要性,并给出如何充分利用KeePassX的建议。 日益互联的数字世界使安全成为一个重要...

Linux就该这么学
12分钟前
0
0
2018最佳GAN论文回顾(下)

继上一篇《2018最佳GAN论文回顾(上)》,我又继续介绍了一个对于GAN的基于样式的生成器体系结构的新论文,提出了一个新的模型来应对这种挑战。 一种用于生成式对抗网络的基于生成器体系结构...

阿里云官方博客
14分钟前
0
0
UnsatisfiedLinkError sawindbg.dll

方法:搜索sawindbg.dll,然后将文件报错的目录下

洛水
50分钟前
5
0
说说不知道的Golang中参数传递

本文由云+社区发表 导言 几乎每一个C++开发人员,都被面试过有关于函数参数是值传递还是引用传递的问题,其实不止于C++,任何一个语言中,我们都需要关心函数在参数传递时的行为。在golang中...

腾讯云加社区
51分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部