2017-04-14 179 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) 
}() 

// ...