2012-02-28 76 views
1

使用Mac,計算我正在運行的特定進程的實例數量的最佳方法是什麼?這是我寫的一個腳本,用於查找在我的機器上運行的ffmpeg進程的數量。如何計算Mac OS X上的特定進程?

我應該在這裏使用top嗎? ps aux|grep ffmpeg?什麼是獲得號碼的最佳方式?

回答

3

grep的-c將計算實例:

count=`ps aux | grep -v "grep" | grep -c ffmpeg` 
echo $count 
+0

嘗試'ps -Cffmpeg'以避免grepping(並捕獲grep本身或'man ffmpeg')。 – 2012-02-28 20:43:58

+0

@userunknown:在mac:'ps -C/usr/sbin/syslogd'會給你'ps:非法參數ffmpeg' – 2012-02-29 01:08:49

+0

呵呵,我猜syslogd或者ffmpeg都是雙方的 - 調用和錯誤是什麼意思?然而,你看,是否有另一種方式來調用ps的名字在MacOS上尋找? – 2012-02-29 04:46:14

1

您正在尋找名爲「wc」的程序 - 「wc -l」會爲您計算行數。

「man wc」瞭解詳情。

2

ps aux | grep ffmpeg | wc -l會爲您提供提及短語'ffmpeg'的進程數量,您需要減去此值的1,因爲ps aux | grep ffmpg也是一個進程。

+2

避免-1的習慣方法是創建一個與自身不匹配的正則表達式。 'ps aux | grep -c'[f] fmpeg'' – tripleee 2012-02-28 05:16:31

+0

@tripleee:改爲嘗試使用'ps -Cffmpeg',相反,在運行'man ffmpeg'的同時嘗試使用這兩個命令。 – 2012-02-28 20:46:42

+0

根據對其他答案的評論,'ps -C'在Mac上似乎不受支持。你可以通過適當地固定'grep'正則表達式來解決這個問題。 – tripleee 2012-02-29 05:44:43

1

您可以在Mac上嘗試killall命令:

$ killall -s ffmpg 
kill -TERM 20148 
kill -TERM 20146 
kill -TERM 20140 

-s意味着只列出你會做什麼,但不實際上殺死任何進程。管它wc,你應該把你的結果:

$ killall -s ffmpg | wc -l 
3 

在shell腳本中,你可以做這樣的事情:

num_of_processes=$(killall -s ffmpg | wc -l) 
1

pgrep

$ pgrep -c ffmpeg 

如果你不如果使用pgrep則僅僅grep可能會產生誤報。

爲了避免它,你可以嘗試-C選項:

$ ps -C ffmpeg -o pid= | wc -l 

檢查您的ps版本正確地解釋它。

+0

pgrep在Mac上不是本地的,是嗎? – 2012-02-29 01:11:33

+0

@Paulo Scardine:'pgrep'支持mac。點擊鏈接。我不知道它是否默認安裝。 – jfs 2012-02-29 07:46:59

+0

downvote,因爲即使在'brew安裝proctools後'我運行'pgrep -c ffmpeg'並取回'pgrep:非法選項-c' – cwd 2015-03-29 13:57:48