我编写了Go程序,它将运行另一个将守护进程的Go程序。
我想知道第一个程序在其子进程进行守护之前必须等待多长时间。
cmd := exec.Command(path1)
cmd.Start()
// exit here
或
cmd := exec.Command(path1)
cmd.Run()
// exit here
或
cmd := exec.Command(path1)
cmd.Start()
time.Sleep(5 * time.Second)
// exit here
如果我使用cmd.Run()
启动守护程序中的命令/操作将结束"等待"在第一个计划中。
答案 0 :(得分:3)
守护进程是just a fancy way of forking the process。这意味着您启动的进程将在守护进程启动后立即退出。因此,您希望使用Run
,它将等待已启动的进程返回(成功的fork)。
Process A:
|
|`-- run(B)
| Process B:
| |
| |`-- daemonize(C)
| |
| `-- exit
|
`-- daemonizing done
如果要等待守护程序的状态,最可靠的方法是由守护程序发出信号。例如,使用套接字,文件或共享内存。