小编mon*_*now的帖子

从systemd启动主进程时无法分离子进程

我想生成长时间运行的子进程,这些进程在主进程重新启动/死亡时仍然存在.从终端运行时这很好用:

$ cat exectest.go
package main

import (
        "log"
        "os"
        "os/exec"
        "syscall"
        "time"
)

func main() {
        if len(os.Args) == 2 && os.Args[1] == "child" {
                for {   
                        time.Sleep(time.Second)
                }
        } else {
                cmd := exec.Command(os.Args[0], "child")
                cmd.SysProcAttr = &syscall.SysProcAttr{Setsid: true}
                log.Printf("child exited: %v", cmd.Run())
        }
}
$ go build
$ ./exectest
^Z
[1]+  Stopped                 ./exectest
$ bg
[1]+ ./exectest &
$ ps -ef | grep exectest | grep -v grep | grep -v vim
snowm     7914  5650  0 23:44 …
Run Code Online (Sandbox Code Playgroud)

linux process go systemd

15
推荐指数
2
解决办法
4921
查看次数

标签 统计

go ×1

linux ×1

process ×1

systemd ×1