簡體   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