Как получить родительский PID данного процесса в GNU/Linux из командной строки?
Решили до того, как спросить: cat /proc/1111/status | grep PPid
.
Решили до того, как спросить: cat /proc/1111/status | grep PPid
.
Командная строка:
ps -o ppid= -p 1111
Функция:
ppid () { ps -p ${1:-$$} -o ppid=; }
Alias (функция предпочтительнее ):
alias ppid='ps -o ppid= -p'
Сценарий:
#!/bin/sh
pid=$1
if [-z $pid]
then
read -p "PID: " pid
fi
ps -p ${pid:-$$} -o ppid=
Если в функцию или скрипт не введен PID, то по умолчанию они показывают PPID текущего процесса.
Для использования псевдонима должен быть введен PID.
Это одна из тех вещей, которые я узнаю, забуду, перезапущу, повторю. Но это полезно. Флаг ‘s’ команды pstree показывает дерево с листом на N:
pstree -sA $(pgrep badblocks)
systemd---sudo---mkfs.ext4---badblocks
```.
Родительский pid в оболочке переменной PPID, поэтому
echo $PPID
Для печати родительских идентификаторов (PPID
) всех процессов используйте следующую команду:
ps j
Для одиночного процесса просто передайте PID, например: ps j 1234
.
Для извлечения только этого значения, отфильтруйте вывод по awk
, например:
ps j | awk 'NR>1 {print $3}' # BSD ps
ps j | awk 'NR>1 {print $1}' # GNU ps
Для списка PID всех родительских идентификаторов используйте pstree
(установите его, если у вас его нет):
$ pstree -sg 1234
systemd(1)───sshd(1036)───bash(2383)───pstree(3007)
Чтобы получить PID родителя текущего процесса, используйте echo $$
.
$ ps -p $(ps -p $(echo $$) -o ppid=) -o comm=
tmux
Немного более сложный пример, проверяющий команду родителя, который запустил текущий процесс Change comm= to cmd= to see full command
Запустите top
с любыми опциями, такими как -u username and -p PID
.
И пока top
работает, нажмите f, он показывает список опций, которые вы хотите отобразить в top
вывод, и отображаемые параметры будут отображаться буквами CAPITAL, а параметры, которые отображаются или не отображаются, будут отображаться маленькими буквами.
Таким образом, введя букву перед параметром, вы можете включить или выключить его. Для идентификатора родительского процесса вы должны ввести b, а затем нажать Enter, он отобразит PPID в верхнем выводе.
Вот быстрое решение, которое также должно работать:
ps $$
Я пришел сюда, когда пытался найти “все родительские процессы pid”. В итоге я создал свою собственную рекурсивную функцию для этого.
#!/bin/bash -eu
main(){
ps -p ${1:-$$} -h -o pid,ppid,args | \
(
read pid ppid args
echo -e "$pid\t$args"
[[$pid -gt 1]] && main $ppid
)
}
main "$@"