Lista identyfikatorów procesów potomnych
Chcę uzyskać listę wszystkich identyfikatorów procesów potomnych dla danego identyfikatora procesu nadrzędnego ( 6330 qemu) do użycia w bashskrypcie.
Widzę je htopnp .:
Najlepsze wyniki wyszukiwania obejmują:
# pgrep -P 6330
(no output)
# ps --ppid 6330
PID TTY TIME CMD
# pstree -p 6330
qemu(6330)-+-{qemu}(6332)
|-{qemu}(6333)
|-{qemu}(6340)
|-{qemu}(6342)
|-{qemu}(6343)
`-{qemu}(6344)
... dane wyjściowe są takie same, jeśli są uruchamiane jako użytkownik rootlub jako właściciel qemu.
Wynik pstreejest możliwy do wykonania w ostateczności, ale wolałbym go nie analizować, jeśli mogę mu pomóc.
Poza tym ... ps aux | grep 6332i pgrep 6332nic nie daje ... więc to też jest trochę zagadkowe.
To powinno być łatwe, prawda?
Szanuję Twój czas.
Odpowiedzi
Chcę uzyskać listę wszystkich identyfikatorów procesów potomnych dla danego identyfikatora procesu nadrzędnego (
6330 qemu) do użycia wbashskrypcie.
Rozwiązanie tego konkretnego problemu jest takie pgrep -P 6330, ale reszta pytania sugeruje, że być może „identyfikatory procesów potomnych” nie są tym, czego naprawdę potrzebujesz.
Użyto, pgrep -P 6330a wynik był pusty, ponieważ nie było procesów potomnych. Co htopi pstreepokazałem, były wątkami . Więc może naprawdę potrzebujesz identyfikatorów wątków.
Zobacz te:
Dlaczego w programie znajduje się wiele procesów pod tym samym tytułem htop?
htoppokazuje domyślnie poszczególne wątki jako oddzielne procesy, podobnie jak wps -ALprzypadku. Jeśli naciśniesz wielkieHlitery, przełączy się na wyświetlanie tylko głównych procesów (ponowne naciśnięcie przełącza z powrotem).man 1 pstree:
Wątki podrzędne procesu znajdują się pod procesem nadrzędnym i są wyświetlane z nazwą procesu w nawiasach klamrowych […]
Czy wątki są implementowane jako procesy w systemie Linux?
Linux używany do przypisywania różnych PID do wątków. Od Linuksa 2.4 wątki procesu współdzielą swój PID; ma to na celu zaspokojenie POSIX. Terminologia stała się bardziej skomplikowana, „PID” jest nieco niejednoznaczny. Z odpowiedniej odpowiedzi na SO :
Pierwszą i najważniejszą rzeczą do uświadomienia jest to, że „PID” oznacza różne rzeczy w przestrzeni jądra i przestrzeni użytkownika. To, co jądro nazywa PIDami, są w rzeczywistości identyfikatorami wątków na poziomie jądra (często nazywanymi TID), […]. Każdy wątek w systemie, czy to w tym samym procesie, czy w innym, ma unikalny TID (lub „PID” w terminologii jądra).
Z drugiej strony to, co jest uważane za PID w POSIXowym znaczeniu „procesu”, nazywane jest w jądrze „ID grupy wątków” lub „TGID”. Każdy proces składa się z jednego lub więcej wątków (procesów jądra), każdy z własnym TID (PID jądra), ale wszystkie mają ten sam identyfikator TGID, który jest równy TID (PID jądra) początkowego wątku, w którym działa główny.
Kiedy
topwyświetla wątki, pokazuje TID (PID jądra), a nie PID (Kernel TGIDs), i dlatego każdy wątek ma osobny.Ostatnie zdanie odnosi się również do
htoplubpstree.
Jeśli nadal chcesz, aby te różne identyfikatory ( 6332, 6333...) do wykorzystania w skrypcie powłoki, należy wywołać w ten sposób:
ps -o lwp= -Lp 6330
Polecenie nie jest przenośne, może działać lub nie w twoim systemie operacyjnym. Jeśli to zadziała, możesz wykluczyć główny wątek:
ps -o lwp= -Lp 6330 | grep -v '^ *6330$'
( <space>*ponieważ ps(przynajmniej moja ps) dodaje spacje wiodące).