Notify程序被Notify()

时间:2016-07-12 09:33:47

标签: go

我是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
 }

0 个答案:

没有答案