Подтвердить что ты не робот

Как получить PID процесса, указав имя процесса в Mac OS X?

Я пишу script для мониторинга CPU и MEM любого процесса. Для этого мне нужно отправить имя процесса, который будет отслеживаться как аргумент командной строки. Например.

./monitorscript <pname>

Мне нужно получить pid процесса в script, чтобы я мог использовать ps -p <pid> внутри.

Как получить pid процесса, учитывая его имя процесса?

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

4b9b3361

Ответ 1

Ответ, приведенный выше, был в основном правильным, просто потребовалась небольшая настройка для различных параметров в Mac OSX.

ps -A | grep [f]irefox | awk '{print $1}'

Ответ 2

Вы можете установить pidof с Homebrew:

brew install pidof
pidof <process_name>

Ответ 3

Вы можете использовать команду pgrep, как в следующем примере

$ pgrep Keychain\ Access
44186

Ответ 4

Это самая короткая команда, которую я мог найти, которая выполняет задание:

ps -ax | awk '/[t]he_app_name/{print $1}'

Вставка скобок вокруг первой буквы останавливает awk от поиска самого awk-процесса.

Ответ 5

Это решение более точно соответствует имени процесса:

ps -Ac -o pid,comm | awk '/^ *[0-9]+ Dropbox$/ {print $1}'

Это решение имеет следующие преимущества:

  • он игнорирует аргументы командной строки, такие как tail -f ~/Dropbox
  • он игнорирует процессы внутри каталога, например ~/Dropbox/foo.sh
  • он игнорирует процессы с именами типа ~/DropboxUID.sh

Ответ 6

Попробуйте следующее:

echo "$(ps -ceo pid=,comm= | awk '/firefox/ { print $1; exit }')"

Команда ps производит вывод следующим образом: с PID в первом столбце и с исполняемым именем (только) во втором столбце:

bookworm% ps -ceo pid=,comm=
    1 launchd
   10 kextd
   11 UserEventAgent
   12 mDNSResponder
   13 opendirectoryd
   14 notifyd
   15 configd

... который awk обрабатывает, печатает первый столбец (pid) и выходит после первого совпадения.

Ответ 7

Вы можете попробовать это

pid=$(ps -o pid=,comm= | grep -m1 $procname | cut -d' ' -f1)

Ответ 8

Почему бы вам не запустить TOP и использовать параметры для сортировки по другим показателям, отличным от PID? Например, самый высокий используемый PID из CPU/MEM?

top -o cpu < --- сортирует все процессы с использованием ЦП