2010-09-24 76 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