我写了一个运行进程的函数,这是我的代码:
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
感谢。