2010-09-24 38 views
53

我正在尝试使用ps -o命令来获取有关与特定名称匹配的进程的具体信息。然而,我在这方面遇到了一些问题,当我尝试使用它甚至只是获取所有进程时,就像这样,它只返回正常ps -ef将返回的子集(它不会返回几乎相同数量的结果所以它不是返回所有正在运行的进程)Linux/Bash,使用ps -o按特定名称获取进程?

ps -ef -o pid,time,comm 

我想尝试这样的事情(下同),但结合了PS -o只是从它那里得到具体的信息(只是PID)

ps -ef |grep `whoami`| grep firefox-bin 

任何意见,赞赏如何做到这一点,谢谢

回答

81

这将让你的PID进程的名字:

pidof name 

您可以再插回以PS为更多的细节:

ps -p $(pidof name) 
+5

'pgrep'也可以使用,但在方式有些不同他们工作。例如,在运行apache2的系统上,'pidof'将会找到“apache2”,但不是“apache”,而'pgrep'会找到它。 – 2010-09-24 21:51:40

+3

OS X人:'brew install pidof' – rogerdpack 2016-10-11 17:49:43

+0

'pidof'没有被POSIX标准化,因此也不能保证,OS X没有'pidof'就证明了这一点。 – Wyatt8740 2018-01-27 19:41:08

22

这是有点老了,但我想什么你想要的是:PS -o PID -C PROCESS_NAME,例如:

ps -o pid -C bash 

编辑:取决于依赖排序输出的,你能指望pgrep会更优雅。据我所知,这是Linux特有的,并产生与上述类似的输出。例如:

pgrep bash 
+3

'pgrep'不是Linux专用的,因为它是在Solaris中引入的,后来在Linux和* BSD下重新实现。 – jlliagre 2014-05-20 17:33:05

+0

pgrep是我一生中见过的最好的东西。 gj h7 – codyc4321 2016-07-28 19:12:56

8
ps -fC PROCESSNAME 

PS和grep是一种危险的组合 - 的grep试图在每一行匹配所有(因此太常见:grep的-v grep的黑客)。 ps -C不使用grep,它使用进程表进行完全匹配。因此,您将得到一个准确的列表:ps -fC sh,而不是找到每个进程在sh处的某处。

+2

尽管这在mac上不起作用。 Mac似乎没有以相同的方式使用'-C',你知道如何在Mac上执行此操作吗?谢谢! – Noitidart 2016-02-12 07:19:03

2

有时你需要通过名称到grep的过程 - 在这种情况下:

ps aux | grep simple-scan 

输出示例:

simple-scan 1090 0.0 0.1 4248 1432 ?  S Jun11 0:00