繁体   English   中英

父主题停止播放时退出Java process.exec

[英]Exit java process.exec when parent thead stops

我有一个Java应用程序,它创建了一个线程,该线程将调用Process.exec来启动python程序。 但是,当我退出程序时,java线程将停止,但是我的python进程继续运行。 当我停止执行Java文件时,有没有办法停止python进程?

这是启动新线程的代码的片段,然后新线程将开始执行python脚本。

MyRunnable myRun = new MyRunnable();
Thread myThread = new Thread(myRun);
myThread.start();

myRunable.java类如下

public class myRunnable implements Runnable(){
    public myRunnable(){

    }
public void run(){
    try{
        Runtime rt = Runtime.getRuntime();
        Process proc = rt.exec("python myPythonScript.py");
        StreamGobbler errGobber = new StreamGobbler(proc.getErrorStream(), "Error");
        StreamGobbler outputGobbler = new StreamGobbler(proc.getInputStream(), "Output");
        errgobbler.start()
        outpoutGobbler.start()
    }catch (IOException e){
        e.printStackTrace();
    }
   }
}

当我退出Java应用程序时,线程停止运行,但是我的python脚本将继续在单独的进程中执行。 我想在线程退出时停止此过程。

编辑:我开始使用Runtime.addShutdownHOok()如下所述。 我仍在对其进行测试,以确保它可以按预期运行,但到目前为止,它似乎仍在工作。 我编辑了Runnable类,使其包含一个shutdownHook,如下所示:

public void run(){
    try{
        Runtime rt = Runtime.getRuntime();
        final Process proc = rt.exec("python myPythonScript.py");
        rt.addShutdownHOok(new Thread(){
            public void run(){
                System.out.println("Exit process");
                proc.destroy();
            }
        )};
        StreamGobbler errGobber = new StreamGobbler(proc.getErrorStream(), "Error");
        StreamGobbler outputGobbler = new StreamGobbler(proc.getInputStream(), "Output");
        errgobbler.start()
        outpoutGobbler.start()
    }catch (IOException e){
        e.printStackTrace();
    }
   }
}    

Runtime.exec()返回一个Process对象。 您可以使用它来杀死外部应用程序:

Process p = Runtime.getRuntime().exec(command);
p.destory();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM