go - 如何发送中断信号

标签 go signals interrupt interrupt-handling

我正在尝试实现一个在 Go 中调用中断信号的函数。我知道如何使用 signal.Notify(interruptChannel, os.Interrupt) 拦截来自控制台的中断信号,但是,我找不到实际发送中断信号的方法。我发现你can send a signal to a process , 但我不确定这是否可用于发送顶级中断信号。

有没有一种方法可以从 Go 函数中发送一个中断信号,该信号可以被任何正在监听系统中断信号的东西捕获,或者是 Go 不支持的东西?

最佳答案

假设你正在使用类似这样的东西来捕获中断信号

var stopChan = make(chan os.Signal, 2)
signal.Notify(stopChan, os.Interrupt, syscall.SIGTERM, syscall.SIGINT)

<-stopChan // wait for SIGINT

在代码的任何地方使用 below 将中断信号发送到上面的等待部分。

syscall.Kill(syscall.Getpid(), syscall.SIGINT)

或者如果您在定义 stopChan 变量的同一个包中。从而使其易于访问。你可以做到这一点。

stopChan <- syscall.SIGINT

或者你可以把stopChan定义成一个全局变量(首字母大写也可以),那么你也可以从不同的包中发送中断信号。

Stopchan <- syscall.SIGINT

关于go - 如何发送中断信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40498371/

相关文章:

任何信号上的 C++ 轮询错误

docker - 测试容器中的体积

arrays - 戈朗 : map with multiple values per key

bash - 我可以在用户按下 Control-C 后强制 MATLAB 退出吗?

c++ - 更自然的 boost::bind 替代方案?

operating-system - 电源故障中断究竟发生了什么?

c - 与 while(1) 并行运行时中断计时器卡住

c - 如何在 32 位中引发浮点错误

unit-testing - 如何模拟其中一种结构方法?

go - 等待 go 例程完成然后从 channel 读取