2

Я использую Mac OS X, что означает, что у меня нет (например) pgrep/pkill, но я хочу что-то подобное (я также не использую macports/fink - homebrew - мой инструмент для выбора пакетов Unix - так что пакеты из тех не подойдут).

Я хочу найти и уничтожить экземпляр ssh с определенными параметрами - в основном, с конкретным туннелем переадресации портов ssh. Команда, которую я бы использовал, выглядит примерно так:

ps aux | grep ssh | grep remote-host | grep port-forwarding-stmt

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

Есть ли инструмент для Mac OS X, который я могу использовать для этого?

4 ответа4

3

Добавьте дополнительный grep в строку, но используйте опцию инвертирования, чтобы удалить все выходные запросы grep:

ps aux | grep ssh | grep remote-host | grep port-forwarding-stmt | grep -v grep
2

Хитрость заключается в том, чтобы обмануть Грепа, чтобы он не нашел себя.

... | grep "[s]sh" | ...
1

ps -a -o pid, command | awk '(/[s]sh/ && /remote-host/ && /port-forwarding-stmt/){ print $1}'

сочетает в себе некоторые из заявленных идей. Часть -o указывает, что мы печатаем только pid и командную строку, а print $1 печатает только часть pid. [s]sh заставляет его не найти себя (хороший трюк!)

1

Можно также использовать awk:

ps axuwww | awk '!/grep/ && /ssh/ && /remote-host/ && /port-forwarding-stmt/'

Аргументы 'www' для ps(1) говорят об отображении полной командной строки вместо сокращенной версии.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .