如何让java程序脱离控制台运行
2015-10-30 09:48
621 查看
现在有个需求:要求我写的程序在后台运行,即在控制台运行之后控制台立即还能进行其它操作或者是关闭退出控制台。网上搜了一大堆,解决办法最复杂有推荐使用apache的common daemon(官方网http://jakarta.apache.org/commons/daemon/jsvc.html)的。推荐最多的是(也就是抄来抄去抄得最多的文章)http://www-900.ibm.com/developerWorks/cn/java/l-app-server/index.shtml这篇文章里的解决办法,这里还提供了源代码,不过好像有个包没提供,没有编译运行。
最后,发现原来解决办法相当easy:将java命令改为javaw命令!这个命令经常在任务管理器里发现,却一直没留意过,今天才发现它是这般用法,不过这个命令不像java样有帮助信息,只好看看官网的解释:
The javaw command is identical to
java, except that with javaw there is no associated console window. Use
javaw when you don't want a command prompt window to appear. The
javaw launcher will, however, display a dialog box with error information if a launch fails for some reason.
[align=right] [/align]
[align=right]摘自http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/java.html[/align]
[align=left] [/align]
[align=left]不过现在有个问题:如何关闭用javaw启动的程序?我现在只能用任务管理器或者Linux里的kill。[/align]
[align=right] [/align]
改:
错了,javaw只能在win32平台上使用,在Linux/Unix没这个命令。汗.......
只是再次去网上爬。费了好久功夫,慢慢意识到,要使程序成为后台程序,方便的做法不是改程序本身,而是改启动程序的方式。于是找到了nohup这个命令。赶紧试试,写了个sh脚本如下(相当简单)
上面nohup的作用是使java -jar proxy.jar这个命令运行后忽略hangup singal,这样即使logout了它也还在运行。值得注意的是nohup本身不会将命令在后台运行,所以最后还得加一个&。 另外“>> ./log/console_output”的意思是将程序向控制台打印的信息重定向到指定的文件,这对后台运行的程序很重要,因为如果程序一直向控制台的缓冲区写数据而数据又得不到清空的话会导致程序crash。
原文出自:http://blog.chinaunix.net/uid-20443874-id-1945877.html
最后,发现原来解决办法相当easy:将java命令改为javaw命令!这个命令经常在任务管理器里发现,却一直没留意过,今天才发现它是这般用法,不过这个命令不像java样有帮助信息,只好看看官网的解释:
The javaw command is identical to
java, except that with javaw there is no associated console window. Use
javaw when you don't want a command prompt window to appear. The
javaw launcher will, however, display a dialog box with error information if a launch fails for some reason.
[align=right] [/align]
[align=right]摘自http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/java.html[/align]
[align=left] [/align]
[align=left]不过现在有个问题:如何关闭用javaw启动的程序?我现在只能用任务管理器或者Linux里的kill。[/align]
[align=right] [/align]
改:
错了,javaw只能在win32平台上使用,在Linux/Unix没这个命令。汗.......
只是再次去网上爬。费了好久功夫,慢慢意识到,要使程序成为后台程序,方便的做法不是改程序本身,而是改启动程序的方式。于是找到了nohup这个命令。赶紧试试,写了个sh脚本如下(相当简单)
nohup java -jar proxy.jar > ./log/console_output & |
原文出自:http://blog.chinaunix.net/uid-20443874-id-1945877.html
相关文章推荐
- eclipse快捷键
- Spring Security教程(4)---- 数据库表结构的创建
- spring和CXF集成来实现webservices
- Java经典封装JDBC模板(充分体现面向对象思想)
- Spring Security教程(3)---- 自定义登录页面
- JAVA开发-我的第一个webScan扫描器
- SpringMVC 拦截异常Exception返回Json,适合Java做后台业务项目
- Spring 自动装配
- 【Java并发编程实战】-----“J.U.C”:ReentrantReadWriteLock
- [原]java运行时修改系统环境变量
- eclipse JAVA实现AES的加密和解密算法
- Spring Security教程(2)----SpringSecurity简单测试
- Spring Security教程(1)----SpringSecurity3.2环境搭建
- java练习题——数组
- Spring Security教程(大纲)----学习过程分享
- java 代理模式 详解(奶粉代购例子)
- spring mvc 的传参方式by pangzi
- Eclipse下导入jar/zip源文件的方法
- 深入理解 Java final 变量的内存模型
- Struts2的OGNL表达式