Go 应用程序无法捕获信号

Go app cannot catch signals

在 linux 上从 kill 发送信号, kill -s 2 <PID>kill -s 15 <PID>

密码是:

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() {
        sig := <-sigs
        fmt.Println(sig)
    }()
    fmt.Println("waiting")
    <-done
    fmt.Println("exiting")
}

程序不处理信号, 只有 CTRL+C 运作良好。

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