Wie kann man die übergeordnete PID eines bestimmten Prozesses in GNU/Linux von der Kommandozeile aus erhalten?
Gelöst vor der Frage: cat /proc/1111/status | grep PPid
Gelöst vor der Frage: cat /proc/1111/status | grep PPid
Befehlszeile:
ps -o ppid= -p 1111
Funktion:
ppid () { ps -p ${1:-$$} -o ppid=; }
Alias (eine Funktion ist vorzugsweise ):
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, zeigen sie standardmäßig die PPID des aktuellen Prozesses an.
Um den Alias zu verwenden, muss eine PID übergeben werden.
Das ist eines der Dinge, die ich lerne, vergesse, wiederlerne, wiederhole. Aber es ist nützlich. Das Flag ‘s’ des Befehls pstree zeigt einen Baum mit einem Blatt bei N:
pstree -sA $(pgrep badblocks)
systemd---sudo---mkfs.ext4---badblocks
Die übergeordnete pid ist in der Shell-Variablen PPID, also
echo $PPID
Um die übergeordneten IDs (PPID
) aller Prozesse zu drucken, verwenden Sie diesen Befehl:
ps j
Für den einzelnen Prozess übergeben Sie einfach die PID, wie: ps j 1234
.
Um nur den Wert zu extrahieren, filtern Sie die Ausgabe von awk
, wie:
ps j | awk 'NR>1 {print $3}' # BSD ps
ps j | awk 'NR>1 {print $1}' # GNU ps
Um die PIDs aller übergeordneten Prozesse aufzulisten, verwenden Sie pstree
(installieren Sie es, wenn Sie es nicht haben):
$ pstree -sg 1234
systemd(1)───sshd(1036)───bash(2383)───pstree(3007)
Um die übergeordnete PID des aktuellen Prozesses zu erhalten, verwenden Sie echo $$
.
$ ps -p $(ps -p $(echo $$) -o ppid=) -o comm=
tmux
Ein etwas komplexeres Beispiel, das den Befehl eines Elternteils prüft, der den aktuellen Prozess gestartet hat Ändern Sie comm= in cmd=, um den vollständigen Befehl zu sehen
Führen Sie top
mit den gewünschten Optionen aus, wie z.B. -u username and -p PID
.
Und während top
arbeitet, drücken Sie f, es zeigt eine Liste von Optionen, die Sie in der Ausgabe von top
anzeigen möchten, und die angezeigten Parameter werden in GROSSBUCHSTABEN und die Parameter, die angezeigt oder nicht angezeigt werden, in Kleinbuchstaben angezeigt.
Durch Eingabe des Buchstabens vor dem Parameter können Sie ihn also aktivieren oder deaktivieren. Für die übergeordnete Prozess-ID müssen Sie b eingeben und dann Enter drücken, dann wird die PPID in der oberen Ausgabe angezeigt.
Hier ist eine schnelle Lösung, die auch funktionieren sollte:
ps $$
Ich kam hierher, als ich versuchte, “all parent processes of a pid” zu finden. Es endete damit, dass ich meine eigene rekursive Funktion dafür erstellte.
#!/bin/bash -eu
main(){
ps -p ${1:-$$} -h -o pid,ppid,args | \
(
read pid ppid args
echo -e "$pid\t$args"
[[$pid -gt 1]] && main $ppid
)
}
main "$@"