Go 如何发送中断信号

Go 如何发送中断信号,go,signals,interrupt,interrupt-handling,Go,Signals,Interrupt,Interrupt Handling,我正在尝试实现一个函数,在Go中调用一个中断信号。我知道如何使用signal.Notify(interruptChannel,os.interrupt)从控制台截取中断信号,但是,我找不到实际发送中断信号的方法。我已经找到了你,但我不确定这是否可以用来发送顶级中断信号 是否有一种方法可以从Go函数中发送中断信号,该信号可以被任何正在监听系统中断信号的人捕获,或者是Go中不支持的信号?使用或其他方法获取进程。调用以发送中断: err := p.Signal(os.Interrupt) 这将把信

我正在尝试实现一个函数,在Go中调用一个中断信号。我知道如何使用
signal.Notify(interruptChannel,os.interrupt)
从控制台截取中断信号,但是,我找不到实际发送中断信号的方法。我已经找到了你,但我不确定这是否可以用来发送顶级中断信号

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

使用或其他方法获取进程。调用以发送中断:

 err := p.Signal(os.Interrupt)

这将把信号发送到目标进程(假设调用进程有这样做的权限),并调用目标进程对SIGINT可能具有的任何信号处理程序。

假设您正在使用类似的方法捕获中断信号

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

<-stopChan // wait for SIGINT
或者,如果您在定义stopChan变量的同一个包中。从而使其易于访问。你可以这样做

stopChan <- syscall.SIGINT

stopChan“顶级中断信号”是什么意思?SIGINT与任何其他信号一样。为什么缓冲区为2?请注意,syscall.Kill()在Windows上不可用。@Berkantiek文档中说,“包信号不会阻止发送到c:调用方必须确保c有足够的缓冲区空间来跟上预期的信号速率。”因为在这个例子中有多个信号被处理,人们可能期望处理更高的吞吐量。至少这是我的猜测。不幸的是,这和下面的解决方案在windows上都不起作用。
stopChan <- syscall.SIGINT
Stopchan <- syscall.SIGINT