为了账号安全,请及时绑定邮箱和手机立即绑定

Go 应用无法捕捉信号

Go 应用无法捕捉信号

Go
蝴蝶不菲 2021-09-13 10:45:49
从 linux 上的 kill 发送信号, kill -s 2 <PID>或kill -s 15 <PID>代码是:package mainimport (  "fmt"   "os"   "os/signal")func main() {    sigs := make(chan os.Signal, 1)    done := make(chan bool, 1)    signal.Notify(sigs)    go func() {        sig := <-sigs        fmt.Println(sig)    }()    fmt.Println("waiting")    <-done    fmt.Println("exiting")}该程序不处理信号,只能CTRL+C运行良好。
查看完整描述

1 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

func()在收到第一个信号后终止,我认为CTLR+C是您尝试时的第一个信号。当它被包裹在一个循环中时它起作用。


package main


import (

  "fmt"

   "os"

   "os/signal"

)


func main() {

    sigs := make(chan os.Signal, 1)

    done := make(chan bool, 1)

    signal.Notify(sigs)

    go func() {

        for {

            sig := <-sigs

            fmt.Println(sig)

        }

    }()

    fmt.Println("waiting")

    <-done

    fmt.Println("exiting")

}

测试;


$ kill -15 <pid>

$ kill -2 <pid>

$ kill -10 <pid>

$ kill -1 <pid>

$ kill -10 <pid>


$ ./signal 

waiting

terminated

interrupt

user defined signal 1

hangup

user defined signal 1


查看完整回答
反对 回复 2021-09-13
  • 1 回答
  • 0 关注
  • 203 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信