2017-04-14 220 views
2

後,我要的東西,如運行從去應用另一種二進制:子進程終止清理

cmd := exec.Command("another_app_binary", "-config", "config.conf") 
cmd.Stdout = os.Stdout 
cmd.Stderr = os.Stderr 
cmd.Run() 

當我殺死父進程(上面的代碼),子進程(another_app_binary)成爲孤兒。在父母退出/終止之後,我有什麼選項可以清除子進程?因爲我打算在win/linux上運行它,所以它必須有一定的平臺性。

+0

怎麼樣'cmd.Process.Kill()' –

+0

如何父及子進程連接到您的應用程序/ another_app_binary?哪一個是哪個?你在說殺死another_app_binary的子進程嗎?請在問題中提供更多信息。 –

+0

謝謝,更新了這個問題。 –

回答

1

您可以使用os/signal包來監聽當前進程中的kill信號。

import (
    "os/exec" 
    "os" 
    "os/signal" 
) 

// ... 

cmd := exec.Command("another_app_binary", "-config", "config.conf") 
cmd.Stdout = os.Stdout 
cmd.Stderr = os.Stderr 
cmd.Run() 

c := make(chan os.Signal, 2) 
signal.Notify(c, os.Interrupt, os.Kill) 
go func() { 
    <-c 
    // cleanup 
    cmd.Process.Kill() 
    os.Exit(1) 
}() 

// ...