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
在 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