[英]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.