Wie erhalte ich die übergeordnete PID eines bestimmten Prozesses in GNU / Linux über die Befehlszeile?

90

Gelöst vor gefragt: cat /proc/1111/status | grep PPid

Vi.
quelle
schneller: grep PPid status |cut -f2wie in time(for((i=0;i<1000;i++));do grep PPid status |cut -f2 >/dev/null;done); frage mich, ob es etwas noch schneller gibt?
Aquarius Power
1
@ AquariusPower Da Sie fragen, ist fgrep schneller als grep. fgrep PPid status |cut -f2
jbo5112
sed ist viel schneller als grep und cut:sed -rn '/PPid/ s/^.*:\s+// p' < status
Marian

Antworten:

108

Befehlszeile:

ps -o ppid= -p 1111

Funktion:

ppid () { ps -p ${1:-$$} -o ppid=; }

Alias ​​(eine Funktion ist vorzuziehen ):

alias ppid='ps -o ppid= -p'

Skript:

#!/bin/sh
pid=$1
if [ -z $pid ]
then
    read -p "PID: " pid
fi
ps -p ${pid:-$$} -o ppid=

Wenn der Funktion oder dem Skript keine PID übergeben wird, wird standardmäßig die PPID des aktuellen Prozesses angezeigt.

Um den Alias ​​zu verwenden, muss eine PID angegeben werden.

Dennis Williamson
quelle
Das =Vorzeichen ist zumindest unter OS X 10.8.2 nicht erforderlich.
jtbandes
5
@jtbandes: Das hier verwendete Gleichheitszeichen unterdrückt die Ausgabe der Kopfzeile ( Linux und OS X ).
Dennis Williamson
13

Dies ist eines der Dinge, die ich lerne, vergesse, neu lerne, wiederhole. Aber es ist nützlich. Die Flagge des pstree-Befehls zeigt einen Baum mit einem Blatt bei N:

pstree -sA $(pgrep badblocks)
systemd---sudo---mkfs.ext4---badblocks
user194394
quelle
12

Die übergeordnete PID befindet sich in der Shell-Variablen PPID

echo $PPID
Ivan Novotny
quelle
1
Ja, aber 1. Ich möchte die übergeordnete PID eines anderen Prozesses. 2. Ich möchte in der Lage sein, alle Vorfahren zu init zu durchlaufen.
Vi.
1
Auf der anderen Seite hat die Verwendung $PPIDnur das Problem gelöst, auf das Google diese Seite als Antwort vorgeschlagen hat.
Paul Whittaker
12

PPIDVerwenden Sie diesen Befehl, um übergeordnete IDs ( ) aller Prozesse zu drucken :

ps j

Für den einzelnen Prozess, geben Sie einfach die PID, wie: ps j 1234.

Um nur den Wert zu extrahieren, filtern Sie die Ausgabe nach awk:

ps j | awk 'NR>1 {print $3}' # BSD ps
ps j | awk 'NR>1 {print $1}' # GNU ps

Um die PIDs aller Eltern aufzulisten, verwenden Sie pstree(installieren Sie sie, wenn Sie sie nicht haben):

$ pstree -sg 1234
systemd(1)───sshd(1036)───bash(2383)───pstree(3007)

Verwenden Sie, um die übergeordnete PID des aktuellen Prozesses abzurufen echo $$.

Kenorb
quelle
1
pstreeist die schönste, die ich hier gesehen habe.
Sudo
ps jist großartig, weil es in vielen Distributionen erhältlich ist und sich leicht komponieren lässt
Connor McCormick
6

Lesen Sie / proc / $ PID / status. Kann leicht gescriptet werden:

#! / bin / sh
P = $ 1
if [-z "$ P"]; dann
    lies P
fi
cat / proc / "$ P" / status | grep PPid: | grep -o [0-9] *
Vi.
quelle
2
grep '^PPid:' /proc/$1/status | grep -o '[0-9]*'ist alles, was du brauchst. (Es ist sehr ungewöhnlich für Unix-Tools, um das if [ -z ]; then readDing zu tun .)
Grawity
@grawity Es hilft, Dinge wieecho $$ | ppid | ppid | ppid
Vi zu
2
UUOC nutzlosen Einsatz von Katze
Felipe Alvarez
@FelipeAlvarez, Meine Hände werden nicht zum Tippen verwendet < /some/file grep | grep | ....
Vi.
2
Was ist mitgrep /some/file
Felipe Alvarez
4

Unter Linux:

ps hoppid $thatprocess
jdoch
quelle
2
$ ps -p $(ps -p $(echo $$) -o ppid=) -o comm=
    tmux

Ein etwas komplexeres Beispiel, das den Befehl eines übergeordneten Elements überprüft, das den aktuellen Prozess gestartet hat. Ändern Sie comm = in cmd =, um den vollständigen Befehl anzuzeigen

sebastian_t
quelle
Nutzlose Nutzung von Echo ? ;)
Bobbogo
Bei einigen Terminals ist dies tatsächlich erforderlich. Um ehrlich zu sein, ich erinnere mich nicht genau, aber es hat tatsächlich ein Problem gelöst. : D
sebastian_t
1

Hier ist eine schnelle Lösung, die auch funktionieren sollte:

ps $$
Gevork Palyan
quelle
Das gibt nicht die übergeordnete PID an, nach der das OP gefragt hat.
Dennis Williamson
1

Führen Sie topmit beliebigen Optionen aus -u username and -p PID.

Während der topArbeitspresse fwird eine Liste der Optionen angezeigt, die in der topAusgabe angezeigt werden sollen. Die angezeigten Parameter werden in GROSSBUCHSTABEN und die Parameter, die angezeigt werden oder nicht, werden in Kleinbuchstaben angezeigt.

Durch Eingabe des Buchstabens vor dem Parameter können Sie ihn aktivieren oder deaktivieren. Für die übergeordnete Prozess-ID müssen Sie eine ID eingeben bund dann drücken Enter. Die PPID wird in der höchsten Ausgabe angezeigt.

Praveen S.
quelle
1
Es ist nicht interaktiv zu verwenden. Ich weiß bereits, dass htopSie in PPIDSpalte konfigurieren können .
Vi.