Мне нужен скрипт, который убивает экземпляры, ssh
которые запускаются с аргументом -D (настройка локального прокси).
Вручную, я ps -A | grep -i ssh
смотрю на экземпляр (ы) с -D, и kill -9 {id}
каждый.
Но как это выглядит в форме bash-скрипта?
(Я нахожусь на Mac OS X, но установлю все необходимые команды через port
)
pgrep
иpkill
это команды для надежного поиска или уничтожения процессов по именам в Solaris и Linux.Ответы:
Запустите
pgrep -f "ssh.*-D"
и посмотрите, вернет ли это правильный идентификатор процесса. Если это произойдет, просто изменить ,pgrep
чтобыpkill
и сохранить те же параметры и шаблонКроме того, вы не должны использовать
kill -9
aka SIGKILL, если в этом нет крайней необходимости, потому что программы не могут перехватить SIGKILL, чтобы очистить себя перед выходом. Я использую толькоkill -9
после первой попытки-1
-2
и-3
.источник
for
цикл, который подходитkill -i
для каждогоi
;)pgrep
не является родным для OSX, вы должны получить его от третьей стороны. В предыдущей ветке по теме есть предложения и альтернативы.-a
флаг, с помощьюpgrep
которого он печатает не только идентификатор процесса, но и команду (включая аргументы). Таким образом, очень легко проверить, что сопоставляются только нужные процессы.Также,
источник
pkill
Вы можете использовать файловую систему proc для сбора информации. Например:
Это не идеально, вам понадобится более эксклюзивное регулярное выражение (особенно, если вы убиваете процессы), но
echo $proc | awk -F'/' '{ print $3 }'
покажет вам PID процесса (ов).источник
/proc
. И уже есть надежный инструмент для этого, называемыйpgrep
(доступен изначально по крайней мере в Solaris и Linux).