我已经维护了一个当前正在我的系统(Linux)上运行的进程的列表,现在如果我可以从这个pid获取进程详细信息,我会在golang中遇到syscall.Getrusage(),但我会很棒我没有得到理想的结果。 有没有人有与之相关的想法
答案 0 :(得分:72)
这可能不是提问者想要的(关于每个进程id需要什么类型的详细信息的信息不是很清楚),但是你可以使用BASH命令{{1}通过其pid得到任务的一些细节。 ( ps 是进程状态的缩写)
默认选项为ps -p $PID
,返回:
ps -p $PID
)可以使用-o选项标志显示有关此进程ID的更多信息。有关列表,请参阅this documentation page。
这是一个示例,告诉您特定进程PID的完整命令,包含参数,用户,组和内存使用情况(注意多个-o标志如何成对,以及命令如何输出大量空白填充):< / p>
java
提示:对于控制台中的人工读取输出,将args作为最后一个选项 - 它通常是最长的,否则可能会缩短。
答案 1 :(得分:9)
ps -p PID -o comm=
输入上面的代码,其中PID是过程的PID。
答案 2 :(得分:4)
您可以查看/proc/[pid]/stat
。例如,使用Go 1,
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))
}
}
输出:
/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
答案 3 :(得分:3)
如果要通过PID查看过程的路径。您可以使用pwdx
命令。 pwdx
命令报告一个或多个进程的当前工作目录:
$ pwdx 13896
13896: /home/user/python_program
答案 4 :(得分:1)
只需键入此内容,您将得到所需的内容,将'type_pid_here'替换为pid。
cat /proc/type_pid_here/status