文档章节

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

zgw06629
 zgw06629
发布于 2015/04/29 19:20
字数 479
阅读 69
收藏 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
海淀
程序员
static变量的线程间共享,进程间不共享

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

cjun1990
2014/12/29
0
0
Gradle学习(九)——构建环境

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

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

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

姜白告
08/03
0
0
JDK工具jstatd用法详解(转)

jstatd,即虚拟机的jstat守护进程,主要用于监控JVM的创建与终止,并提供一个接口允许远程监控工具依附到在本地主机上运行的JVM。 用法摘要 jstatd [ options ] 命令行选项。这些选项可以是任...

easonjim
2017/09/06
0
0
JVM性能优化, Part 5:Java的伸缩性

ImportNew注: JVM性能优化系列文章前4篇由ImportNew翻译(第一篇,第二篇,第三篇, 第四篇)。本文由新浪微博:吴杰 (@WildJay) 投稿至ImportNew。感谢吴杰! 如果你希望分享好的原创文章或...

梁杰_Jack
2014/10/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何通过 J2Cache 实现分布式 session 存储

做 Java Web 开发的人多数都会需要使用到 session (会话),我们使用 session 来保存一些需要在两个不同的请求之间共享数据。一般 Java 的 Web 容器像 Tomcat、Resin、Jetty 等等,它们会在...

红薯
今天
3
0
C++ std::thread

C++11提供了std::thread类来表示一个多线程对象。 1,首先介绍一下std::this_thread命名空间: (1)std::this_thread::get_id():返回当前线程id (2)std::this_thread::yield():用户接口...

yepanl
今天
3
0
Nignx缓存文件与动态文件自动均衡的配置

下面这段nginx的配置脚本的作用是,自动判断是否存在缓存文件,如果有优先输出缓存文件,不经过php,如果没有,则回到php去处理,同时生成缓存文件。 PHP框架是ThinkPHP,最后一个rewrite有关...

swingcoder
今天
2
0
20180920 usermod命令与用户密码管理

命令 usermod usermod 命令的选项和 useradd 差不多。 一个用户可以属于多个组,但是gid只有一个;除了gid,其他的组(groups)叫做扩展组。 usermod -u 1010 username # 更改用户idusermod ...

野雪球
今天
3
0
Java网络编程基础

1. 简单了解网络通信协议TCP/IP网络模型相关名词 应用层(HTTP,FTP,DNS等) 传输层(TCP,UDP) 网络层(IP,ICMP等) 链路层(驱动程序,接口等) 链路层:用于定义物理传输通道,通常是对...

江左煤郎
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部