猿问

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

我有两个围棋程序。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() 在内部执行 process.Signal(SIGKILL)


30秒到达战场
浏览 580回答 1
1回答

慕姐4208626

SIGKILL 不能被接收进程捕获 - 内核将强制进程终止。您可以发送 SIGTERM 以在另一端处理和处理它 - 这是停止应用程序的常规方法。
随时随地看视频慕课网APP

相关分类

Go
我要回答