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



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

我的代码由一个调用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
}

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

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

相关内容

  • 没有找到相关文章

最新更新