我有两个去节目。 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)
答案 0 :(得分:6)
SIGKILL不能被接收过程困住 - 内核会强制进程终止。您可以发送SIGTERM来处理并在另一侧处理它 - 这是一种停止应用程序的传统方法。