Ответы:
Командная строка:
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); Интересно, есть ли что-то еще быстрее?