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

我正在使用此功能进入“守护进程”模式:


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使用后没有写入任何内容(如果没有,它也可以正常工作)。


这里的原因可能是什么?


qq_花开花谢_0
浏览 206回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go