2012-02-28 1 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 -C ffmpeg', чтобы избежать grepping (и ловить grep самостоятельно, или' man ffmpeg'). –

+0

@userunknown: в mac: 'ps -C/usr/sbin/syslogd' дает вам' ps: незаконный аргумент ffmpeg' –

+0

О, я думаю, syslogd или ffmpeg с обеих сторон - подразумевается вызов и ошибка? Однако вы посмотрели, есть ли другой способ вызвать ps с именем, которое нужно искать на MacOS? –

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

+0

@tripleee: попробуйте 'ps -C ffmpeg' вместо этого, и, напротив, попробуйте обе команды, пока выполняете' man ffmpeg'. –

+0

В соответствии с комментариями к другим ответам, 'ps -C', кажется, не поддерживается на Mac. Вы можете исправить это, привязав регулярное выражение 'grep' соответствующим образом. – tripleee

1

Вы можете попробовать команду killall на Mac:

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

-s означает просто список того, что вы могли бы сделать, но не фактически убить любые процессы. Труба это wc, и вы должны получить свой результат:

$ killall -s ffmpg | wc -l 
3 

В сценарии оболочки, вы можете сделать что-то вроде этого:

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

pgrep:

$ pgrep -c ffmpeg 

Если вы дон 't использовать pgrep, тогда просто grep может создавать ложные срабатывания.

Чтобы избежать этого, вы можете попробовать -C вариант:

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

Убедитесь, что ваша версия ps интерпретирует его правильно.

+0

pgrep не является родным на mac, не так ли? –

+0

@Paulo Scardine: 'pgrep' поддерживает mac. Нажмите на ссылку. Я не знаю, установлен ли он по умолчанию. – jfs

+0

downvote, потому что даже после 'brew install proctools' я запускаю' pgrep -c ffmpeg' и возвращаюсь 'pgrep: незаконный вариант - c' – cwd