Wie erhält man die Eltern-PID eines bestimmten Prozesses in GNU / Linux von der Kommandozeile?

172039
Vi.

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

79
schneller: `grep PPid status | cut -f2` wie in` time (für ((i = 0; i <1000; i ++)); tun grep PPid-Status | cut -f2> / dev / null; done) `; frage mich, ob es noch etwas schneller geht? Aquarius Power vor 9 Jahren 0
@AquariusPower Da du fragst, ist fgrep schneller als grep. `fgrep PPid-Status | cut -f2` jbo5112 vor 8 Jahren 1
sed ist viel schneller als grep und cut: `sed -rn '/ PPid / s / ^.*: \ s + // p' <status` Marian vor 7 Jahren 0

9 Antworten auf die Frage

92
Dennis Williamson

Befehlszeile:

ps -o ppid= -p 1111 

Funktion:

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

Alias (a function is preferable):

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

Script:

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

If no PID is supplied to the function or the script, they default to show the PPID of the current process.

To use the alias, a PID must be supplied.

Das Zeichen "=" ist nicht erforderlich, zumindest unter OS X 10.8.2. jtbandes vor 11 Jahren 0
@jtbandes: Das hier verwendete Gleichheitszeichen unterdrückt die Ausgabe der Kopfzeile ([Linux] (http://linux.die.net/man/1/ps) und [OS X] (https://developer.apple) .com / library / mac / # Dokumentation / darwin / reference / manpages / man1 / ps.1.html)). Dennis Williamson vor 11 Jahren 5
11
Ivan Novotny

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

echo $PPID 
Ja, aber 1. Ich möchte Eltern-PID eines anderen Prozesses, 2. Ich möchte in der Lage sein, alle Vorfahren zu initieren. Vi. vor 11 Jahren 1
Andererseits konnte mit $ PPID das Problem gelöst werden, auf das Google diese Seite als Antwort vorgeschlagen hatte. Paul Whittaker vor 11 Jahren 1
11
user194394

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

pstree -sA $(pgrep badblocks) systemd---sudo---mkfs.ext4---badblocks 
6
kenorb

Dieser Befehl:

ps j 

gibt übergeordnete IDs ( PPID) aller Prozesse aus.

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 1234 | awk 'NR>1 ' # BSD ps ps j 1234 | awk 'NR>1 ' # GNU ps 

Um die PIDs aller Eltern aufzulisten, verwenden Sie pstreewie folgt :

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

Um die übergeordnete PID des aktuellen Prozesses zu erhalten, verwenden Sie echo $$.

"pstree" ist das schönste, das ich hier gesehen habe. sudo vor 6 Jahren 0
5
Vi.

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

#! / bin / sh P = 1 $ wenn [-z "$ P"]; dann lesen Sie P fi cat / proc / "$ P" / status | grep PPid: | grep -o "[0-9] *" 
`grep '^ PPid:' / proc / $ 1 / status | grep -o '[0-9] *' `ist alles was Sie brauchen. (Es ist sehr ungewöhnlich, dass Unix-Tools das `if [-z] ausführen, dann lesen Sie`). grawity vor 13 Jahren 1
@grawity Es hilft, Dinge wie `echo $$ | ppid | ppid | ppid` Vi. vor 13 Jahren 0
UUOC nutzlose Verwendung von Katzen Felipe Alvarez vor 9 Jahren 2
@FelipeAlvarez, Meine Hände werden nicht verwendet, um `</ some / file grep | einzugeben grep | ... Vi. vor 9 Jahren 0
Was ist mit `grep / some / file`? Felipe Alvarez vor 9 Jahren 2
Vielen Dank für diese Antwort, es hat mir auf einem eingebetteten System geholfen, das nur eine Flagge für ps hatte (-w für die Breitausgabe). Daher haben alle Antworten, die ps verwenden, für mich nicht funktioniert. Vielen Dank! Citizen Kepler vor 7 Jahren 0
3
jthill

Unter Linux:

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

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

Nutzlose Verwendung von _echo_? ;) bobbogo vor 6 Jahren 0
Es ist tatsächlich auf einigen Terminals erforderlich. Um ehrlich zu sein, erinnere ich mich nicht genau, aber tatsächlich wurde ein Problem gelöst. : D sebastian_t vor 6 Jahren 0
1
Praveen S.

Run top with whatever options you want, like -u username and -p PID.

And while top is working press f, it shows a list of options you want to display in top output, and the displayed parameters will be shown in CAPITAL letters and the parameters which or not displaying will be shown in small letters.

So by entering the letter before the parameter you can enable or disable it. For parent process ID you have to enter b and then press Enter, it'll display the PPID in top output.

Es ist nicht interaktiv zu verwenden. Ich weiß bereits, dass Sie in `htop` die Spalte 'PPID` konfigurieren können. Vi. vor 11 Jahren 1
1
Gevork Palyan

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

ps $$ 
Das gibt nicht die übergeordnete PID, nach der das OP gefragt hat. Dennis Williamson vor 10 Jahren 0