是否有一个相当于ps的go命令?

时间:2018-01-04 06:05:40

标签: linux go

我想要一种方法来迭代PID列表,扫描具有特定命令的进程。例如,ps ax的列是

 PID TTY      STAT   TIME COMMAND

我想知道是否有办法让我确定一个PID的COMMAND列给出它的编号。

2 个答案:

答案 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可能对您有用。