我需要一个C/C++ API,它允许我列出Linux系统上正在运行的进程,并列出每个进程打开的文件.
我不希望最终直接读取的/ proc /文件系统.
谁能想到办法做到这一点?
我是 GO 和 mac 的新手,我正在尝试使用 sysctl 来查找正在运行的进程的完整路径名。
kprocs, err := unix.SysctlKinfoProcSlice("kern.proc.all")
if err != nil {
fmt.Println("error: ", err)
}
for _, proc := range kprocs {
name := string(proc.Proc.P_comm[:])
pid := proc.Proc.P_pid
extName, err := unix.SysctlKinfoProc("kern.proc.pathname", int(pid))
if err != nil {
fmt.Println("error: ", err)
}
Run Code Online (Sandbox Code Playgroud)
并收到错误:没有这样的文件或目录
我正确使用这个功能吗?
编辑
如果我像这样运行进程: ./processName ,那么我没有得到它的完整路径,例如 /Users/username/go/src/processName - 这就是我需要的。所有的解决方案ps都会给出相对路径,而我需要一些给出过程的绝对路径的东西。
如果您只知道进程名称,那么使用Go代码终止进程的有效方法是什么?我看到os包提供的一些功能如:
func FindProcess(pid int) (*Process, error)
func (p *Process) Kill() error
func (p *Process) Signal(sig Signal) error
Run Code Online (Sandbox Code Playgroud)
是否有一个好的/通常的做法来获得pid不必执行命令然后解析输出?
我找到了一种方法来使用如下命令取回pid:
echo $(ps cax | grep myapp | grep -o '^[ ]*[0-9]*')而且我已经使用了它,exec.Command()但如果有更好的方法我想避免它.