golang - exec.Command启动一个进程并获得pid

时间:2015-10-21 08:20:58

标签: linux go

我写了一个运行进程的函数,这是我的代码:

func execCmd(user User, command string) (*exec.Cmd, error) {
    cmd := exec.Command(os.Getenv("SHELL"), "-c", command)
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr
    cmd.SysProcAttr = &syscall.SysProcAttr{}
    cmd.SysProcAttr.Credential = &syscall.Credential{Uid: uint32(user.UID), Gid: uint32(user.GID)}
    if err := cmd.Start(); err != nil {
        return nil, err
    }
    return cmd, nil
}

我使用cmd.Process.Pid在流程开始后获取流程的pid。 它适用于/tmp/test之类的命令,但使用命令/tmp/test > /tmp/test.log返回意外的pid。该命令返回1比实际pid(actual pid - 1)少。我想获得pid /tmp/test并在使用此pid kill /tmp/test

例如:cmd.Process.pid = 10667,但ps -ef | grep /tmp/test显示pid等于10668

感谢。

0 个答案:

没有答案