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


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.


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

12

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

echo $PPID

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 $$.


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] *

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


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


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

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.


1
Es ist nicht interaktiv zu verwenden. Ich weiß bereits, dass htopSie in PPIDSpalte konfigurieren können .
Vi.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.