如何让java程序脱离控制台运行

现在有个需求:要求我写的程序在后台运行,即在控制台运行之后控制台立即还能进行其它操作或者是关闭退出控制台。网上搜了一大堆,解决办法最复杂有推荐使用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.
 
 
不过现在有个问题:如何关闭用javaw启动的程序?我现在只能用任务管理器或者Linux里的kill。
 
 
改:
  错了,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

 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值