Баш-скрипт, щоб знайти та вбити процес із певними аргументами?


17

Я хочу сценарій, який вбиває екземпляри (и) sshяких запускаються аргументом -D (налаштування локального проксі).

Я вручну ps -A | grep -i sshшукаю екземпляри з -D, і kill -9 {id}кожен.

Але як це виглядає у формі bash script?

(Я перебуваю на Mac OS X, але встановлю всі необхідні команди через port)


Дивіться альтернативи pgrep та pkill на mac os x? . pgrepі pkillє командами для надійного пошуку або вбивства процесів по імені під Solaris та Linux.
Жил 'ТАК - перестань бути злим'

Відповіді:


26

Запустіть pgrep -f "ssh.*-D"і подивіться, чи повертає це правильний ідентифікатор процесу. Якщо це станеться, просто змінити , pgrepщоб pkillі зберегти ті ж параметри і шаблон

Крім того, ви не повинні використовувати kill -9ака SIGKILL, якщо це абсолютно не потрібно, оскільки програми не можуть захопити SIGKILL, щоб очистити після себе перед виходом. Я використовую лише kill -9після першої спроби -1 -2і -3.


вам слід переосмислити вбивство як forцикл, який робить kill -iдля кожного i;)
Сеамус,

1
pgrepне є рідним на OSX, ви повинні отримати його від третьої сторони. У попередній темі теми є пропозиції та альтернативи.
Жил 'ТАК - перестань бути злим'

людина жива, чим більше я використовую 'nix, тим більше я люблю його :) дякую за це!
javamonkey79

pgrep і pkill доступні в ОС X 10.8 (Mountain Lion) і вище. apple.blogoverflow.com/2012/07/…
Пітер Хенлі

Можливо, буде корисно додати -aпрапор, pgrepякий змушує його друкувати не тільки ідентифікатор процесу, але і команду (включаючи аргументи). Таким чином дуже легко перевірити, чи відповідають лише бажані процеси.
луатор


0

Ви можете використовувати файлову систему proc для збору інформації. Наприклад:

for proc in $(grep -irl "ssh.*-D" /proc/*/cmdline | grep -v "self"); do if [ -f $proc ]; then cat $proc && echo ""; fi; done

Це не ідеально, ви хочете отримати більш ексклюзивний регулярний вираз (особливо якщо ви вбиваєте процеси), але echo $proc | awk -F'/' '{ print $3 }'покаже вам PID процесу.


1
OSX не має /proc. І вже є надійний інструмент для цього, який називається pgrep(доступний як мінімум у Solaris та Linux).
Жил "ТАК - перестань бути злим"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.