我可以在OS X上使用GNU ps吗?


18

我们可以通过安装GNU coreutilsbrew。但是utils中没有ps。我们可以ps在OS X中使用gnu 吗?

我想使用GNU,ps因为它具有更多选项和功能。


您是否尝试过在OSX上运行psps -ef在终端上运行?我可以在两台不同的机器上不加修改地在OSX 10.7.5上工作。它在/ bin / ps中
jammypeach

是的,我知道,我想使用GNU,ps因为它具有更多的选项和功能。
Sanghyun Lee

啊,好的,对不起,我没有从所述问题中意识到这一点。我建议在某个地方包括该地址,以防其他人认为与我相同–祝您找到解决方案的好运
jammypeach 2015年

感谢您的建议。我对此添加了更多的解释。
Sanghyun Lee

Answers:


22

没有可移植的ps程序。正如其他人所提到的,Linux上可用的ps命令来自“ procps”软件包。之所以不能将其移植到OSX,是因为Linux和OSX内核不会以相同的方式公开此信息。Linux在/ proc中使用伪文件系统,而OSX使用sysctl函数。其他系统可能使用任何一种机制,但以不同的格式提供数据,或者可能要求诸如ps之类的程序直接从内核内存中读取。

通常,对于诸如ps和top之类的程序如何使用过程信息,没有标准。因此该程序必须针对特定的操作系统而设计。如果OSX ps缺少某个特定功能,则必须找到另一个可以执行此操作的程序,或者自己编写一个程序(请参阅sysctl手册,尤其是KERN_PROC作为起点),或者修改现有的ps。命令以添加功能。

或者,如果您可以通过解析ps命令本身的输出来获得所需的内容,则可以编写可移植的程序-该-o选项的输出在各个平台上都相当可靠,尤其是在您参考UNIX标准的情况下。要使用的列名。


/proc文件系统的Linux内核提供了获取进程列表的唯一方法,还是有独立也系统调用其提供的信息?
Tanner Swett

1
@TannerSwett我不这么认为。在实现/ proc之前,Linux上的ps命令通过从/ dev / kmem和/ dev / swap中读取来工作。
Random832

9

否-因为它不存在。至于为什么ps GNU coreutils软件包中没有内置的内容,请在Unix和Linux论坛上查看此答案。

通过Homebrew可获得的最佳替代公式是psgrep

psgrep是一个小的Bash shell脚本,它使用强大的实用程序grep(1)搜索进程列表(由ps(1)获得

也就是说,您仍然psgrep可以像OS X一样使用ps。例如:

   OPTIONS
   -a     Search the process list using BSD's "ps aux" format. This option
          includes all users' processes in the search.

   -b     Search the process list using BSD's "ps  ux"  format  (default).
          This option only includes the running user's processes.

pgrep也可以通过来使用brew,它在语法上更接近ps,但效率不如psgrep

psgrep(1)pgrep(1)更有用,因为它不仅可以搜索进程列表并返回PID,而且还可以提供更多有用的信息,例如其UID,GID,内存/ CPU使用率,美观程度以及所有其他受支持的信息由ps。


全部强调我的。


2
pgrep也是OS X最新版本的一部分
nohillside

@patrix agh!好点,确认:type -a pgrep pgrep is /usr/local/bin/pgrep pgrep is /usr/bin/pgrep
njboot 2015年

顺便说一句,正如此处所提到的,proctoolsMacPorts或Homebrew 的软件包都提供了pgreppkill这是我个人在这里出现时一直在寻找的东西。
TheDudeAbides

3

ps根据Wikpedia的说法,它不是GNU coreutils的一部分。我的Linux发行版附带的版本似乎来自procps,但似乎自制软件中没有公式。有一些公式pstree可以为您提供出色的树状视图,并且还是htop另一个不错的过程查看器。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.