我遇到了一种非常奇怪的情况,Java进程在通过Apache/PHP调用时似乎挂起,而在从命令行调用时却没有问题。我花了几个小时调试这个,没有用。欢迎所有的想法!
情境:我有一个.class文件(没有原始的Java代码),它读取输入文件,处理读取的信息,并在stdout上写入报告。Java代码不读取stdin,只编写stdout。我把它封装在一个很小的Perl脚本中,它基本上只是执行"java -cp /path/to/classfile MyJavaProgram /path/to/inputfile/to/process“。这样我就可以从命令行调用它进行测试,这就像一种魅力。接下来,我尝试使用popen()从PHP调用它,然后Java就挂起了。我在ps列表和Java中看到了Perl进程;但是Java进程永远等待。一旦我杀死它,the服务器页面就会继续加载(当然,没有Java进程会生成的预期输出)。
到目前为止我尝试过的是:
不幸的是,我无法用我控制的东西替换Java代码。我只有要处理的.class文件。我还没有尝试在Linux下运行这个程序,所以这可能仍然是OSX特有的问题(这会让我吃惊)。
这到底是怎么回事?任何“疯狂”的想法都值得赞赏..。谢谢!
发布于 2013-04-30 16:10:46
检查apache和cmd行中的所有环境,包括路径、UID等。
还检查挂起时java进程所做的事情(在从两个地方(apache和cmdline)包装它时,请使用桁架/tusc/strace -f java xxxxxxxxxxx 2>/tmp/trace.$),然后比较结果。
另外,当从perl包装时,在执行java之前,将stdin、stdout、stderr的自动刷新设置为1。
https://stackoverflow.com/questions/16252375
复制相似问题