3 回答
TA贡献1828条经验 获得超4个赞
假设您正在使用这样的东西来捕获中断信号
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
TA贡献1876条经验 获得超5个赞
使用FindProcess、StartProcess或其他方式获取进程。调用Signal发送中断:
err := p.Signal(os.Interrupt)
这会将信号发送到目标进程(假设调用进程有权这样做)并调用目标进程可能对 SIGINT 具有的任何信号处理程序。
TA贡献1846条经验 获得超7个赞
对于 windows 情况,您可以使用以下方法:
func SendInterrupt() error {
d, e := syscall.LoadDLL("kernel32.dll")
if e != nil {
return fmt.Errorf("LoadDLL: %v", e)
}
p, e := d.FindProc("GenerateConsoleCtrlEvent")
if e != nil {
return fmt.Errorf("FindProc: %v", e)
}
r, _, e := p.Call(syscall.CTRL_BREAK_EVENT, uintptr(syscall.Getpid()))
if r == 0 {
return fmt.Errorf("GenerateConsoleCtrlEvent: %v", e)
}
return nil
}
- 3 回答
- 0 关注
- 229 浏览
添加回答
举报