Lista identyfikatorów procesów potomnych

Oct 02 2020

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

2 KamilMaciorowski Oct 02 2020 at 10:35

Chcę uzyskać listę wszystkich identyfikatorów procesów potomnych dla danego identyfikatora procesu nadrzędnego ( 6330 qemu) do użycia w bashskrypcie.

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 w ps -ALprzypadku. Jeśli naciśniesz wielkie Hlitery, 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 htoplub pstree.

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