调用程序退出/崩溃时关闭Java子进程

时间:2012-03-27 19:14:13

标签: java python pipe multiprocess orphan

我正在组建一个多语言系统,但遇到了孤立进程的问题。

我的代码包含一个调用Java程序的Python程序,在两个程序之间进行管道通信; Java程序是持久的,而不仅仅是一次性运行。一切都工作正常,但如果Python程序过早退出,我需要关闭Java程序。

认为这样做的最好方法是让Java程序自动关闭,如果它无法检测程序之间的stdin管道,但我无法理解这样做。

相关的Python代码:

javaInterface = subprocess.Popen(["pathtojavaprogram"], stdin=subprocess.PIPE, stdout=subprocess.PIPE)

相关的Java代码;我希望程序退出,如果它无法从stdin读取,但我认为readLine()函数的一些阻塞问题正在发挥作用:

String stdinStr = "";
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));

while(true){
    try{
        stdinStr = stdin.readLine();
    }
    catch(java.lang.Exception e){
        System.exit(0);
    }
    //Do stuff with the stdinStr data
}

1 个答案:

答案 0 :(得分:0)

这在trutheality的评论中得到了回答,但我想将此标记为已回答。

每当管道退出时,readLine()函数都会返回null,因此检查它可以让您正确关闭子流程。