Jak uzyskać nadrzędny PID danego procesu w GNU / Linux z wiersza poleceń?


90

Rozwiązane przed zapytaniem: cat /proc/1111/status | grep PPid


szybciej: grep PPid status |cut -f2jak w time(for((i=0;i<1000;i++));do grep PPid status |cut -f2 >/dev/null;done); zastanawiam się, czy jest coś jeszcze szybszego?
Aquarius Power

1
@AquariusPower Ponieważ pytasz, fgrep jest szybszy niż grep. fgrep PPid status |cut -f2
jbo5112

sed jest znacznie szybszy niż grep i cięty:sed -rn '/PPid/ s/^.*:\s+// p' < status
Marian

Odpowiedzi:


107

Wiersz poleceń:

ps -o ppid= -p 1111

Funkcjonować:

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

Alias ​​( preferowana jest funkcja ):

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

Scenariusz:

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

Jeśli do funkcji lub skryptu nie zostanie podany PID, domyślnie wyświetlają PPID bieżącego procesu.

Aby użyć aliasu, należy podać PID.


=Znak nie jest konieczne, przynajmniej na OS X 10.8.2.
jtbandes

5
@jtbandes: Używany tutaj znak równości tłumi wyjście linii nagłówka ( Linux i OS X ).
Dennis Williamson

13

To jedna z tych rzeczy, których się uczę, zapominam, uczę się, powtarzam. Ale to jest przydatne. Flaga „p” polecenia pstree pokazuje drzewo z liściem w N:

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

12

Pid nadrzędny znajduje się w zmiennej PPID powłoki, więc

echo $PPID

1
Tak, ale 1. Chcę rodzic pid innego procesu, 2. Chcę mieć możliwość przejścia wszystkich przodków do inicjacji.
Vi.

1
Z drugiej strony, użycie $PPIDrozwiązało właśnie problem, na który Google zasugerowało tę stronę jako odpowiedź.
Paul Whittaker,

12

Aby wydrukować nadrzędny identyfikator ( PPID) wszystkich procesów, użyj tego polecenia:

ps j

Dla jednego procesu, po prostu przekazać PID, jak: ps j 1234.

Aby wyodrębnić tylko wartość, filtruj dane wyjściowe według awk:

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

Aby wyświetlić listę PID wszystkich rodziców, użyj pstree(zainstaluj, jeśli go nie masz):

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

Aby uzyskać nadrzędny identyfikator PID bieżącego procesu, użyj echo $$.


1
pstreejest najmilszy, jaki tu widziałem.
sudo

ps jjest świetny, ponieważ jest dostępny na wielu dystrybucjach i łatwo go skomponować
Connor McCormick

6

Odczyt / proc / $ PID / status. Może być łatwo skrypty:

#! / bin / sh
P = 1 USD
jeśli [-z "$ P"]; następnie
    przeczytaj P.
fi
cat / proc / "$ P" / status | grep PPid: | grep -o „[0-9] *”

2
grep '^PPid:' /proc/$1/status | grep -o '[0-9]*'to wszystko czego potrzebujesz. (Jest to bardzo rzadkie w przypadku narzędzi uniksowych if [ -z ]; then read.)
grawity

@grawity Pomaga robić rzeczy takie jakecho $$ | ppid | ppid | ppid
Vi.

2
UUOC bezużyteczne użycie kota
Felipe Alvarez

@FelipeAlvarez, Moje dłonie nie są używane do pisania < /some/file grep | grep | ....
Vi.

2
Co powiesz nagrep /some/file
Felipe Alvarez


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

Nieco bardziej złożony przykład, który sprawdza polecenie rodzica, który rozpoczął bieżący proces Zmień comm = na cmd =, aby zobaczyć pełne polecenie


Bezużyteczne użycie echa ? ;)
bobbogo,

Jest to faktycznie wymagane na niektórych terminalach. Szczerze mówiąc, nie pamiętam dokładnie, ale to faktycznie rozwiązało problem. : D
sebastian_t


1

Uruchom topz dowolnymi opcjami, jak chcesz -u username and -p PID.

I podczas toppracy naciśnij f, pokazuje listę opcji, które chcesz wyświetlić w topdanych wyjściowych, a wyświetlane parametry będą wyświetlane dużymi literami, a parametry, które nie są wyświetlane, zostaną wyświetlone małymi literami.

Więc wpisując literę przed parametrem, możesz ją włączyć lub wyłączyć. W przypadku identyfikatora procesu nadrzędnego należy wprowadzić, ba następnie nacisnąć Enter, wyświetli on PPID w górnym pliku wyjściowym.


1
Należy go stosować nieinteraktywnie. Wiem już, że htopmożesz skonfigurować PPIDkolumnę.
Vi.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.