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