如何在golang中发送中断信号?

时间:2016-11-08 23:51:10

标签: go signals interrupt interrupt-handling

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

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

2 个答案:

答案 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)

使用FindProcessStartProcess或其他方式获取流程。调用Signal发送中断:

 err := p.Signal(os.Interrupt)

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