doumao1887 2016-07-12 09:33
浏览 43

golang程序被Notify()阻止

I am a new learner of golang. I completed a daemon program and make it ready to receive signals. It worked well for the normal case.

But if I kill the process using "kill -9" and restart it again, I find it is always blocked at Notify(). Until I restart OS, it could work well again. OS is centOS 7.0. Could anyone know the problem ? I could not find any similar problem by google. Thanks a lot !

Codes like that: Updated codes so that use following codes to reproduce problem:

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条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 微信会员卡接入微信支付商户号收款
    • ¥15 如何获取烟草零售终端数据
    • ¥15 数学建模招标中位数问题
    • ¥15 phython路径名过长报错 不知道什么问题
    • ¥15 深度学习中模型转换该怎么实现
    • ¥15 HLs设计手写数字识别程序编译通不过
    • ¥15 Stata外部命令安装问题求帮助!
    • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
    • ¥15 TYPCE母转母,插入认方向
    • ¥15 如何用python向钉钉机器人发送可以放大的图片?