Java 启动含有 Log4Cxx 的外部程序导致该程序挂起


======================================================
注:本文源代码点此下载
======================================================

今天为这件事情折腾了一天!

我用 java 写的中间件,会根据用户的需要,启动一个子进程,这个进程是用 c++ 写的,正好用到了 log4cxx 来记录日志以便分析。这个进程,单独从控制终端运行,没有任何问题;但是一旦用 java 启动子进程的方式来启动,则这个子进程刚一启动就阻塞不动了,然后大概等上几十分钟到两个小时不等,该子进程则又能顺利执行下去。

第一次碰到这样的问题,很怪异,经过反复测试及万能的 google 帮忙,找到java调用外部程序挂起原因,log4cxx 原来是罪魁祸首,因为它重定向了大量的日志信息到控制台,由于 java 进程没有清空程序写到缓冲区的内容,结果导致程序一直在等待。

解决这个问题有两个办法:

按上文中的说法,在遇到 java 启动外部程序而导致线程阻塞的时候,可以考虑使用两个线程来同时清空 process 获取的两个输入流;

直接把 log4cxx 重定向到控制台的日志消息给取消掉,这个可以通过 log4cxx 的配置文件来实现

问题搞定了,世界又变得很美好了!


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值