Как получить pid по названию процесса

Привет! Я искал разные форумы, и здесь я также мог найти ответы на некоторые вопросы по Linux и Mac, но не смог найти решения для Unix и особенно Korn Shell.

Как получить имя процесса (имя команды) из идентификатора процесса (pid)

Ниже ссылка, которую я нашел из SO Этот И этот также

Я попробовал ниже команды

ps -eaf | awk '{ print substr($0, index($0, $9)) }'

Выше команда терпит неудачу в точке, где дано ВРЕМЯ, а не месяц и дата (потому что в этом случае будет только 8 столбцов в строке)

Любое предложение поможет.

3 ответа

Я думаю, что это проще в использовании pgrep

$ pgrep bluetoothd
441

В противном случае вы можете использовать awk:

ps -ef | awk '$8=="name_of_process" {print $2}'

Например, если ps -ef имеет такую ​​строку:

root       441     1  0 10:02 ?        00:00:00 /usr/sbin/bluetoothd

затем ps -ef | awk '$8=="/usr/sbin/bluetoothd" {print $2}' возвращается 441,


В кш пгреп не найден. а другое решение дает сбой в случае, если ниже выводится команда ps jaggsmca325 7550 4752 0 сент. 11 pts/44 0:00 sqlplus dummy_user/dummy_password@dummy_schema

Давайте проверим последний столбец ($NF), независимо от его номера:

$ ps -ef | awk '$NF=="/usr/sbin/bluetoothd" {print $2}'
441

Если вы хотите сопоставить не точные строки, вы можете использовать ~ вместо:

$ ps -ef | awk '$NF~"bluetooth" {print $2}'
441
1906

Ты можешь использовать pidof получить все идентификаторы запущенных процессов с именем p_name
pidofp_name | tr ' ' '\n' (для вертикальной распечатки)
pkillp_name убить все процессы с именем p_name
NB убедитесь, что у вас есть разрешение убить их всех:)

Если твой ps | awk Решение не удается, потому что выход ps не то что хочешь, тогда сделай так

ps -eaf -o pid,cmd | awk '/regex-to-match-command-name/{ print $1 }'
ps -C <the-name> -o etime=

Мой пс из procps-ng .

Другие вопросы по тегам