Ответы:
Командная строка:
ps -o ppid= -p 1111
Функция:
ppid () { ps -p ${1:-$$} -o ppid=; }
Псевдоним (функция предпочтительнее ):
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.
=
Знак не нужен, по крайней мере , на OS X 10.8.2.
Это одна из тех вещей, которые я изучаю, забываю, заново изучаю, повторяю. Но это полезно. Флаг 'p' команды pstree показывает дерево с листом в N:
pstree -sA $(pgrep badblocks)
systemd---sudo---mkfs.ext4---badblocks
Родительский pid находится в переменной оболочки PPID, поэтому
echo $PPID
$PPID
только что решило проблему, на которую Google предложил эту страницу в качестве ответа.
Чтобы напечатать родительские идентификаторы ( 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 $$
.
pstree
самый хороший, который я видел здесь.
ps j
великолепен, потому что он доступен во многих дистрибутивах и легко компонуется
Чтение / proc / $ PID / статус. Может быть легко написано:
#! / Bin / ш P = $ 1 if [-z "$ P"]; тогда читать P фи cat / proc / "$ P" / status | grep PPid: | grep -o "[0-9] *"
grep '^PPid:' /proc/$1/status | grep -o '[0-9]*'
это все, что тебе нужно. ( Инструменты Unix очень редко делают if [ -z ]; then read
это.)
echo $$ | ppid | ppid | ppid
< /some/file grep | grep | ...
.
grep /some/file
$ ps -p $(ps -p $(echo $$) -o ppid=) -o comm=
tmux
Немного более сложный пример, который проверяет команду родителя, запустившего текущий процесс. Измените comm = на cmd =, чтобы увидеть полную команду.
Вот быстрое решение, которое также должно работать:
ps $$
Запуск top
с любой опции , которые вы хотите, как -u username and -p PID
.
И пока top
работает нажатие f, он показывает список опций, которые вы хотите отобразить в top
выходных данных, и отображаемые параметры будут показаны заглавными буквами, а параметры, которые или не отображаются, будут показаны строчными буквами.
Таким образом, введя букву перед параметром, вы можете включить или отключить его. Для ID родительского процесса вы должны ввести bи затем нажать Enter, он будет отображать PPID в верхнем выводе.
htop
вы можете настроить PPID
колонку.
grep PPid status |cut -f2
как вtime(for((i=0;i<1000;i++));do grep PPid status |cut -f2 >/dev/null;done)
; Интересно, есть ли что-то еще быстрее?