2012-02-28 77 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