我正在使用此功能进入“守护进程”模式:
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使用后没有写入任何内容(如果没有,它也可以正常工作)。
这里的原因可能是什么?
相关分类