ps и kill в одной команде

Понадобилось как-то мне прибивать процесс от предыдущей сессии Selenium на MacOS.

Для поиска и принудительного завершения процессов одной командой в Mac OS используйте комбинацию ps, grep, awk и xargs. Самый универсальный способ: найти процессы по имени, получить их PID и убить.

Пример (убить все процессы с именем "port 4445"):

ps -ax | grep "port 4445" | grep -v grep | awk '{print $1}' | xargs kill -9

    Разбор команды:
  • ps -ax: выводит список всех запущенных процессов.

  • grep "port 4445": ищет строку с именем программы. bash-3.2$ ps -ax |grep "port 4445" 10203 ?? 0:00.03 /Users/karashchuk/geckodriver --binary /Applications/Firefox.app/Contents/MacOS/firefox --port 4445 --host 10.123.20.80 --allow-hosts 10.123.55.130 --websocket-port 9223 10287 ttys004 0:00.00 grep port 4445
  • grep -v grep: исключает из результатов саму команду bash-3.2$ ps -ax |grep "port 4445 | grep -v grep 10203 ?? 0:00.03 /Users/karashchuk/geckodriver --binary /Applications/Firefox.app/Contents/MacOS/firefox --port 4445 --host 10.123.20.80 --allow-hosts 10.123.55.130 --websocket-port 9223
  • grep.awk '{print $1}': извлекает первый столбец (PID — идентификатор процесса). bash-3.2$ ps -ax |grep "port 4445 | grep -v grep | awk '{print $1}'" 10203
  • xargs kill -9: передает полученные PID команде kill для принудительного завершения.

Также эта команда великолепно работает и под FreeBSD и Линухами, естествеено с небольщими переделками.