如何正确启动一个使用Go守护进程的进程?

时间:2014-04-09 23:57:30

标签: linux go

我编写了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()启动守护程序中的命令/操作将结束"等待"在第一个计划中。

1 个答案:

答案 0 :(得分:3)

守护进程是just a fancy way of forking the process。这意味着您启动的进程将在守护进程启动后立即退出。因此,您希望使用Run,它将等待已启动的进程返回(成功的fork)。

Process A:
|
|`-- run(B)
|    Process B:
|    |
|    |`-- daemonize(C)
|    |
|     `-- exit
|
 `-- daemonizing done

如果要等待守护程序的状态,最可靠的方法是由守护程序发出信号。例如,使用套接字,文件或共享内存。