Как получить pid с именем процесса
Привет, я искал различные форумы, и здесь также я мог найти ответы на вопросы для Linux и Mac, но не смог найти решение для Unix и специально для Korn Shell.
Как получить имя процесса (имя команды) из идентификатора процесса (pid)
Ниже ссылка, которую я нашел из SO
Этот
И этот тоже
Я попытался выполнить команду
ps -eaf | awk '{ print substr($0, index($0, $9)) }'
Выше команда не работает в точке, где указано время, а не месяц и дата (потому что в этом случае в строке будет всего 8 столбцов)
Любое предложение поможет.
Ответы
Ответ 1
Я думаю, что проще использовать 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
.
В ksh pgrep не найден. и другое решение не выполняется в случае ниже выводится команда ps jaggsmca325 7550 4752 0 сен 11 очков /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
Ответ 2
Вы можете использовать pidof
для получения всех идентификаторов запущенных процессов с именем p_name
pidof
p_name | tr ' ' '\n'
p_name | tr ' ' '\n'
(для вертикального листинга)
pkill
p_name
убивает все процессы с именем p_name
NB убедитесь, что у вас есть разрешение убить их всех :)
Ответ 3
Если ваше решение ps | awk
не работает, потому что вывод ps
не тот, который вы хотите, сделайте так:
ps -eaf -o pid,cmd | awk '/regex-to-match-command-name/{ print $1 }'
Ответ 4
ps -C <the-name> -o etime=
Мой пс из procps-ng.