我想要一种方法来迭代PID列表,扫描具有特定命令的进程。例如,ps ax
的列是
PID TTY STAT TIME COMMAND
我想知道是否有办法让我确定一个PID的COMMAND
列给出它的编号。
答案 0 :(得分:4)
Go语言和ps
命令无关。
ps
命令是POSIX规范的一部分,可在所有类Unix系统(包括Linux,Solaris,* BSD,......)上使用。阅读ps(1)。它与您的operating system相关(您可能在Windows上没有它)。阅读Operating Systems: Three Easy Pieces以了解有关操作系统的更多信息,以及一些Linux编程手册,如ALP,以了解有关Linux编程的更多信息。另见intro(2)& syscalls(2)(并找到Go的等价物)。
我想要一种方法来迭代PID列表,扫描具有特定命令的进程。
我想知道是否有办法让我确定一个PID的COMMAND列给出它的编号。
这与Go无关。您可以使用/proc/
伪文件系统,请参阅proc(5),它存在于所有Linux系统上,无论是否安装了Go。 ps(1),top(1),pmap(1)等在内部使用/proc/
...
要迭代进程列表(在Linux上),您需要阅读/proc/
目录中的数字条目(例如,如果存在pid 1234的进程,则存在/proc/1234/
)。要阅读目录,请在C中使用opendir(3),readdir(3),closedir(3),stat(2),并且它们都具有与之等效的内容,例如:在ioutils
package。
特别是,对于进程1234,您可以阅读/proc/1234/cmdline
(其中包含 NUL 字节分隔的字符串)。当然你可以从一些Go程序中读取该文件。尝试使用od -cx /proc/self/cmdline
命令(使用od(1))来了解该文件的格式......
/proc/
中的伪文件是“管状”,具有0的表观大小(由stat(2)或ls(1) ...给出),并且应该按顺序读取,见this。
答案 1 :(得分:1)
go-ps可能对您有用。