======================================================
注:本文源代码点此下载
======================================================
今天为这件事情折腾了一天!
我用 java 写的中间件,会根据用户的需要,启动一个子进程,这个进程是用 c++ 写的,正好用到了 log4cxx 来记录日志以便分析。这个进程,单独从控制终端运行,没有任何问题;但是一旦用 java 启动子进程的方式来启动,则这个子进程刚一启动就阻塞不动了,然后大概等上几十分钟到两个小时不等,该子进程则又能顺利执行下去。
第一次碰到这样的问题,很怪异,经过反复测试及万能的 google 帮忙,找到java调用外部程序挂起原因,log4cxx 原来是罪魁祸首,因为它重定向了大量的日志信息到控制台,由于 java 进程没有清空程序写到缓冲区的内容,结果导致程序一直在等待。
解决这个问题有两个办法:
按上文中的说法,在遇到 java 启动外部程序而导致线程阻塞的时候,可以考虑使用两个线程来同时清空 process 获取的两个输入流;
直接把 log4cxx 重定向到控制台的日志消息给取消掉,这个可以通过 log4cxx 的配置文件来实现。
问题搞定了,世界又变得很美好了!
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/