我目前正在尝试实现一个可以在Google Go中调用中断信号的函数。我知道如何使用signal.Notify(interruptChannel, os.Interrupt)
拦截来自控制台的中断信号,但是,我找不到实际发送中断信号的方法。我发现你can send a signal to a process,但我不确定这是否可用于发送顶级中断信号。
有没有办法从golang函数中发送一个中断信号,该函数可以被正在侦听系统中断信号的任何东西捕获,或者是golang不支持的东西?
答案 0 :(得分:14)
假设你正在使用这样的东西捕获中断信号
var stopChan = make(chan os.Signal, 2)
signal.Notify(stopChan, os.Interrupt, syscall.SIGTERM, syscall.SIGINT)
<-stopChan // wait for SIGINT
在代码中的任何位置使用以下命令将中断信号发送到上述等待部分。
syscall.Kill(syscall.Getpid(), syscall.SIGINT)
或者,如果您位于定义了stopChan变量的同一个包中。从而使它可以访问。你可以这样做。
stopChan <- syscall.SIGINT
或者您可以将stopChan定义为全局变量(使大写字母中的第一个字母实现相同),然后您也可以从其他包中发送中断信号。
Stopchan <- syscall.SIGINT
答案 1 :(得分:12)
使用FindProcess,StartProcess或其他方式获取流程。调用Signal发送中断:
err := p.Signal(os.Interrupt)
这会将信号发送到目标进程(假设调用进程有权这样做)并调用目标进程可能对SIGINT有的任何信号处理程序。