golang在cmd.Start启动的进程中处理kill

时间:2014-08-18 07:24:09

标签: go interrupt

我有两个去节目。 ProgA使用cmd.Start()启动ProgB。从ProgA我尝试杀死ProgB,但是ProgB应该立即被杀死,它必须在死前做一些清理工作。所以我在ProgB中使用signal.Notify来处理sigcall.SIGKILL,但每当ProgA调用progb.Process.Kill()时,它似乎没有通知ProgB(将内容写入sigc通道)

ProgB中的

我有这样的通知:

signal.Notify(sigc, syscall.SIGKILL)
go func() {
            fmt.Println("started listening")
            <-sigc
            fmt.Println("sig term")
            cleanUp()
            os.Exit(1)   

}()
someLongRunningCode() 

有什么我错过的吗?我确信ProgA发送了一个SIGKILL因为cmd.Process.Kill()在内部执行了一个进程.Signal(SIGKILL)

1 个答案:

答案 0 :(得分:6)

SIGKILL不能被接收过程困住 - 内核会强制进程终止。您可以发送SIGTERM来处理并在另一侧处理它 - 这是一种停止应用程序的传统方法。