您的位置:首页 > 编程语言 > Java开发

如何让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 > ./log/console_output &
上面nohup的作用是使java -jar proxy.jar这个命令运行后忽略hangup singal,这样即使logout了它也还在运行。值得注意的是nohup本身不会将命令在后台运行,所以最后还得加一个&。 另外“>> ./log/console_output”的意思是将程序向控制台打印的信息重定向到指定的文件,这对后台运行的程序很重要,因为如果程序一直向控制台的缓冲区写数据而数据又得不到清空的话会导致程序crash。

原文出自:http://blog.chinaunix.net/uid-20443874-id-1945877.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: