Jak uzyskać pid dla rodziców z pid dla dzieci?
Wiem, że mogę to sprawdzić ręcznie pod / proc. Zastanawiam się, czy istnieje sprytny / lepszy sposób na osiągnięcie tego w Ubuntu. Pamiętaj, że rodzic może, ale nie musi, zostać zabity.
Dzięki
Jak uzyskać pid dla rodziców z pid dla dzieci?
Wiem, że mogę to sprawdzić ręcznie pod / proc. Zastanawiam się, czy istnieje sprytny / lepszy sposób na osiągnięcie tego w Ubuntu. Pamiętaj, że rodzic może, ale nie musi, zostać zabity.
Dzięki
Odpowiedzi:
Posługiwać się ps -o ppid=
ps -o ppid= 2072zwraca 2061, które można łatwo wykorzystać w skrypcie itp. ps -o ppid= -C foopodaje PPID procesu za pomocą polecenia foo. Można również użyć staroświecki ps | grep: ps -eo ppid,comm | grep '[f]oo'.ps -f 2072zwraca
UID PID PPID C STIME TTY STAT TIME CMD izx 2072 2061 0 07:16? S 0:00 / usr / lib / pulseaudio / pulse / gconf-helper
pstreeRelacja jest: pstree -s -p 2072:
init (1) ulpulseaudio (2061) ───gconf-helper (2072)
ppid= ale przed pid wydaje się konieczna. Otrzymałem inne wyniki, jeśli je pominąłem.
echo $PPID
jeśli potrzebujesz polecenia z tego nadrzędnego pid:
cat /proc/$PPID/comm
jeśli potrzebujesz pełnego wiersza poleceń (ze wszystkimi opcjami):
cat /proc/$PPID/cmdline
$PPID jest zdefiniowany przez powłokę, jest to PID procesu nadrzędnego/proc/, masz kilka katalogów z PID każdego procesu. Następnie, jeśli chcesz cat /proc/$PPID/comm, powtarzasz nazwę polecenia PIDPPIDzdefiniowany jako część standardu POSIX, więc każda powłoka zgodna z POSIX powinna to odpowiednio ustawić. Zobacz pubs.opengroup.org/onlinepubs/9699919799/utilities/…
pstreewedług nazwy poleceniaZa pomocą tej opcji pstreemożesz wyszukiwać według nazwy procesu potomnego i uzyskać identyfikator procesu (PID) wraz z rodzicami, dziadkami i wszystkimi dziećmi procesu potomnego:
$ pstree -hp | grep sleep
|-cron(763)---cron(795)---sh(839)---display-auto-br(841)---sleep(8414)
W tym przypadku sleepjest to polecenie potomne, a jego PID to 8414. Jego identyfikator nadrzędny to 841 i nazywa się display-auto-brightness. Dziadek jest powłoką ( sh) o identyfikatorze procesu 839. Pradziadek ma cronidentyfikator procesu 795. Prapradziadek ma również cronidentyfikator procesu 763.
Jeśli chcesz wyszukiwać według identyfikatora procesu sleepzamiast nazwy, możesz użyć:
$ pstree -hp | grep 14653
|-cron(763)---cron(795)---sh(839)---display-auto-br(841)---sleep(14653)
Zauważ, że sleepidentyfikator procesu został zmieniony na 14653. Nadrzędny (PID 841) śpi przez 1 minutę, budzi się na ułamek sekundy, a następnie uruchamia nowe sleeppolecenie, które otrzymuje nowy identyfikator procesu. Jest to kolejny powód, dla którego wyszukiwanie sleepjest łatwiejsze niż wyszukiwanie według identyfikatora procesu.
Ten kod pochodzi z: Automatycznie dostosuj jasność wyświetlacza na podstawie wschodu i zachodu słońca i dostosował się do tego pytania.
Aby zobaczyć łańcuch zagnieżdżony od samego początku do procesu rozruchu, użyj PID zamiast nazwy:
$ pstree -aps 8541
systemd,1 splash fastboot kaslr
└─cron,763 -f
└─cron,795 -f
└─sh,839 -c /usr/local/bin/display-auto-brightness
└─display-auto-br,841 /usr/local/bin/display-auto-brightness
└─sleep,8541 60
Uwaga: Minęła kolejna minuta, a polecenie uśpienia otrzymuje nowy PID (8541).
807lub cronta sama linia zostanie zrestartowana, a także więcej dzieci, jeśli zostaną odrodzone. Pytanie dotyczyło jednak znalezienia rodzica, a nie wszystkich dzieci.
1. Nie sądzę, że możesz zabić PID 1.
ps -efj można również użyć do tego samego.
Na przykład,
> ps -efj | head
UID PID PPID PGID SID C STIME TTY TIME CMD
root 1 0 1 1 0 Jul01 ? 00:00:13 /sbin/init splash
root 2 0 0 0 0 Jul01 ? 00:00:00 [kthreadd]
root 3 2 0 0 0 Jul01 ? 00:00:02 [ksoftirqd/0]
root 5 2 0 0 0 Jul01 ? 00:00:00 [kworker/0:0H]
root 7 2 0 0 0 Jul01 ? 00:06:44 [rcu_sched]
root 8 2 0 0 0 Jul01 ? 00:00:00 [rcu_bh]
root 9 2 0 0 0 Jul01 ? 00:00:00 [migration/0]
root 10 2 0 0 0 Jul01 ? 00:00:08 [watchdog/0]
root 11 2 0 0 0 Jul01 ? 00:00:08 [watchdog/1]
ps -o args ...wyników, ale to ma trochę zapachu.