我是golang的新学习者。我完成了守护程序并准备好接收信号。它适用于正常情况。
但如果我使用" kill -9"并重新启动它,我发现Notify()总是被阻止。在我重新启动操作系统之前,它可以再次运行良好OS是centOS 7.0。有谁能知道这个问题?我无法通过谷歌找到任何类似的问题。非常感谢!
这样的代码:更新了代码,以便使用以下代码重现问题:
package main
import (
"fmt"
"os"
"os/signal"
"syscall"
)
func sigHandler() {
c := make (chan os.Signal, 1)
fmt.Println("Daemon: before Notify() ") //always appear succussfully
signal.Notify(c)
fmt.Println("Daemon: block to receive signal ")
/*if restart after "kill", above msg will not appear again. And this program could not receive any sigal again...*/
//for true { //remove true according to comments
for {
s := <-c
fmt.Println("Daemon: receive signal ", s)
}
}
func main() {
ret, _, _:= syscall.RawSyscall(syscall.SYS_FORK, 0, 0, 0)
if ret > 0 { //parent exit
os.Exit(0)
}
sigHandler() //block main to receive signal
}