2014-02-10 5 views
1
root  1626  1 0 04:49 ?  00:00:00 /usr/sbin/sshd 
USERNAME 5133 5038 0 14:12 pts/0 00:00:00 /bin/bash ./find_proc.sh sshd 
USERNAME 5137 5133 0 14:12 pts/0 00:00:00 grep sshd 

Как я могу использовать grep для фильтрации нижней части процессов?Использование grep для процесса фильтрации

ps -ef | grep "$1" 

- это то, что дает мне этот выход. Я знаю, что вам нужно использовать grep -v, чтобы отфильтровать его, но я не уверен в том, как это сделать. Он принимает аргумент, равный $ 1. Таким образом, мой вход в терминал - ./script_file sshd, чтобы получить результат выше. Какие-либо предложения?

ps -ef | grep "$1" | grep -v grep 

не дает мне выхода.

+0

почему не применяйте обрезанные или AWK и такие команды istead из Grep? – MLSC

ответ

2

Вы можете использовать pgrep. Он доступен на большинстве современных систем Linux и Unix (на OSX, доступных через home brew):

pgrep -fl "$1" 
+1

'pgrep' - это путь. Это не вызывает проблем с фильтрацией 'grep' из вашего вывода _grepped_. –

+1

'pgrep' и' pkill' были включены в OS X в Mavericks. –

+0

Как в ps -ef | pgrep -fl "$ 1"? – user2860658

1

Так что проблема в том, что вы запускаете что-то вроде ps aux | grep sshd, а grep попадает в список процессов? Там простой трюк, чтобы обойти этот недостаток, а именно вложить один символ в скобках:

ps aux | grep ssh[d] 

Кронштейны разлагаются далеко оболочкой так grep даже не видит их, но они все еще часть командной строки поэтому он не включает строку sshd.

1

Благодаря @DavidW .: Я до сих пор на старых OSX 10.6.8

снег У Leopard есть аналогичная команда pgrep и pill под названием killall. Во многих отношениях killall превосходит pgrep и pkill, но это также немного сложнее в использовании.

Одним из параметров является параметр -s, который будет показать что он будет делать.

Основная проблема с killall является то, что он может убить, если вы не будете осторожны:

$ killall -s $command 
kill -TERM 2193 
kill -TERM 32832 
Смежные вопросы