为了账号安全,请及时绑定邮箱和手机立即绑定

time.sleep 分叉后冻结程序(Go)

time.sleep 分叉后冻结程序(Go)

Go
qq_花开花谢_0 2021-07-09 13:00:20
我正在使用此功能进入“守护进程”模式:func daemon(nochdir, noclose int) int {        ret, _, err := syscall.Syscall(syscall.SYS_FORK, 0, 0, 0)        if err != 0 {                maybe_exit_err("Forking", err)                return -1        }        switch ret {        case 0:                break        default:                os.Exit(0)        }        sid, err2 := syscall.Setsid()        maybe_exit_err(fmt.Sprintf("could not set session: %s", sid), err2)        if sid == -1 {                return -1        }        if nochdir == 0 {                os.Chdir("/")        }        if noclose == 0 {                f, e := os.OpenFile("/dev/null", os.O_RDWR, 0)                if e == nil {                        fd := int(f.Fd())                        syscall.Dup2(fd, int(os.Stdin.Fd()))                        syscall.Dup2(fd, int(os.Stdout.Fd()))                        syscall.Dup2(fd, int(os.Stderr.Fd()))                }        }        return 0}只要我不使用time.Sleep(1 * time.Second). 在那之后,它只是坐在那里什么也不做,我什至在循环中将写入测试字符串添加到我自己打开的文件中,并且在time.Sleep使用后没有写入任何内容(如果没有,它也可以正常工作)。这里的原因可能是什么?
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 205 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信