使用Golang从子流程ID中获取父流程ID

时间:2019-06-12 13:58:18

标签: linux go

我想使用适用于Linux操作系统的Golang从特定的子进程ID(pid)获取父进程ID(ppid)

我有这段代码给出了当前进程的ppid和pid,但是我想检索我指定的子进程的ppid,而不是当前进程。

package main

 import (
         "fmt"
         "os"
 )

 func main() {

         pid := os.Getpid()

         parentpid := os.Getppid()

         fmt.Printf("The parent process id of %v is %v\n", pid, parentpid)

 }

是否有一种方法可以传递os.Getppid(pid)这样的pid或其他任何方法来检索Golang中指定pid的ppid?

1 个答案:

答案 0 :(得分:1)

我认为go标准库不允许您执行此操作,但是mitchellh/go-ps等第三方软件包可提供更多信息。

示例:

import ps "github.com/mitchellh/go-ps"
...

list, err := ps.Processes()
if err != nil {
  panic(err)
}
for _, p := range list {
  log.Printf("Process %s with PID %d and PPID %d", p.Executable(), p.Pid(), p.PPid())
}

输出:

2019/06/12 09:13:04 Process com.apple.photom with PID 68663 and PPID 1
2019/06/12 09:13:04 Process CompileDaemon with PID 49896 and PPID 49895

您还可以使用ps.FindProcess(<pid>)查找特定进程并检查其PPid