我从现在开始维护了我的系统(Linux)上当前正在运行的进程的pids列表,如果我可以从此pid中获取进程详细信息,那我就很高兴了,我已经在golang中通过syscall.Getrusage()了,但是我没有得到 预期的结果。
有人有相关的想法吗
-
您从
syscall.Getrusage 得到什么结果? -
@Atom:有关
getrusage - get resource usage 的信息,请参见Linux手册页。 - 对于输入0x0和0x1,它给了我一些结构,我觉得此功能不能用于获取流程详细信息,并且仅供启动该流程的人使用下面的代码出现问题,由peterSO表示,当我正在阅读流程详细信息时 我为几个进程获取的每个pid中不存在这样的目录,因为可能不存在该目录,因为进程可能已被杀死以完成其任务。
这可能不是要求者所要的(关于每个进程ID所需的详细信息类型,并没有很多明确的信息),但是您可以使用BASH命令
默认选项为
- PID:回显进程ID
- TTY:控制终端的名称(如果有)
- TIME:自执行以来,该进程使用了??多少CPU时间(例如00:00:02)
-
CMD:调用该进程的命令(例如
java )
可以使用-o options标志显示有关该进程ID的更多信息。有关列表,请参见此文档页面。
这是一个告诉您特定过程PID的完整命令的示例,其中包含参数,用户,组和内存使用情况(请注意,多个-o标志如何成对使用,以及该命令如何输出带有大量空白填充):
1 | ps -p $PID -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS |
提示:对于控制台中供人读取的输出,请将args设为最后一个选项-它通常是最长的,否则可能会缩短。
只需键入此内容,您将得到所需的内容,用pid替换" type_pid_here"。
1 | cat /proc/type_pid_here/status |
1 | ps -p PID -o comm= |
输入上面的代码,其中PID是过程的PID。
您可以查看
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | package main import ( "fmt" "io/ioutil" "os" "strconv" ) func Pids() ([]int, error) { f, err := os.Open(`/proc`) if err != nil { return nil, err } defer f.Close() names, err := f.Readdirnames(-1) if err != nil { return nil, err } pids := make([]int, 0, len(names)) for _, name := range names { if pid, err := strconv.ParseInt(name, 10, 0); err == nil { pids = append(pids, int(pid)) } } return pids, nil } func ProcPidStat(pid int) ([]byte, error) { // /proc/[pid]/stat // https://www.kernel.org/doc/man-pages/online/pages/man5/proc.5.html filename := `/proc/` + strconv.FormatInt(int64(pid), 10) + `/stat` return ioutil.ReadFile(filename) } func main() { pids, err := Pids() if err != nil { fmt.Println("pids:", err) return } if len(pids) > 0 { pid := pids[0] stat, err := ProcPidStat(pid) if err != nil { fmt.Println("pid:", pid, err) return } fmt.Println(`/proc/[pid]/stat:`, string(stat)) } } |
输出:
1 | /proc/[pid]/stat: 1 (init) S 0 1 1 0 -1 4202752 11119 405425 21 57 78 92 6643 527 20 0 1 0 3 24768512 563 184467440737095 |
如果要通过PID查看过程的路径。您可以使用
1 2 | $ pwdx 13896 13896: /home/user/python_program |