Как получить 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
pidof
p_name | tr ' ' '\n'
(для вертикальной распечатки) pkill
p_name
убить все процессы с именем p_name
NB убедитесь, что у вас есть разрешение убить их всех:)
Если твой ps | awk
Решение не удается, потому что выход ps
не то что хочешь, тогда сделай так
ps -eaf -o pid,cmd | awk '/regex-to-match-command-name/{ print $1 }'