Z task_structpunktu widzenia, nici jest procesem mają taką samą moderatora gwintu ( group_leaderwtask_struct ), podczas gdy procesy dziecko ma inną moderatora gwint (każdy indywidualny proces dziecka).
Ta informacja jest narażony na przestrzeni użytkownika poprzez w /procsystemie plików. Możesz prześledzić rodziców i dzieci, patrząc na ppidpole w /proc/${pid}/statlub .../status(daje to rodzicowi pid); możesz śledzić wątki, patrząc na tgidpole w .../status(daje to identyfikator grupy wątków, który jest również pid lidera grupy). Wątki procesu są widoczne w /proc/${pid}/taskkatalogu: każdy wątek otrzymuje własny podkatalog. (Każdy proces ma co najmniej jeden wątek.)
W praktyce programy chcące śledzić własne wątki polegałyby na interfejsach API udostępnianych przez używaną bibliotekę wątków zamiast na informacjach specyficznych dla systemu operacyjnego. Zwykle w systemach uniksowych, co oznacza używanie pthreads.
Każdy proces w potoku powłoki (echo foo | cat) ma tego samego lidera grupy (powłokę), ale nie są wątkami w tym samym procesie.
psusi
2
Mówisz o grupach procesów; w mojej odpowiedzi lider grupy jest z perspektywy jądra. W rachunkowości jądra oddzielne procesy są liderami własnej grupy. Możesz to zobaczyć, uruchamiając (sleep 120 | sleep 120) &i sprawdzając Tgidwartości w pliku każdego sleepprocesu /proc/${pid}/status.
Stephen Kitt
O dziwne. Nie wiedziałem, że istnieje coś takiego jak „lider grupy wątków” i pomyślałem, że podobno wszystkie wątki w procesie wielowątkowym są równe i nie ma „lidera”. Każdy z nich może wyjść i dopóki nie zostanie, proces nie jest martwy.
psusi
5
Uruchamia to toppolecenie z kilkoma dodatkowymi opcjami:
top -H -b -n 1
W -Hprzesyła zlecenie argumentów góry do wyświetlenia każdego pojedynczego gwintu. Zwykle top podsumowuje wszystkie wątki w procesie nadrzędnym.
-bArgument ma górny bieg w trybie wsadowym - informacje gromadzone są wyświetlane, a następnie przeniesiono do stdout w przeciwieństwie do pracy w trybie interaktywnym i orzeźwiający dane wyświetlane.
Po wybraniu tej -bopcji użytkownik musi podać na górze, ile razy uruchomić, odbywa się to z -nargumentem, a ostatni argument z iloma uruchomieniami.
Dlatego top -H -b -n 1instruuje system, aby „uruchomił się na górze, wyświetlił poszczególne wątki, uruchomił w trybie wsadowym i uruchomił tylko raz”.
-eLfArgument (może być używany jako -e -L -frównież) rozkłada się w następujący sposób:
ekaże pswyświetlać wszystkie procesy bez względu na to, kto jest ich właścicielem lub ich aktualny status - aktywny, spanie, wstrzymany, oczekiwanie na We / Wy itp.
Lmówi, psaby pokazać poszczególne wątki
fmówi psdo formatowania wyjścia jako wpis w pełnym formacie, aw połączeniu z Largumentacji NLWP (liczba wątków) i LWP (ID wątku) kolumny są dodawane do wyjścia.
Mówisz to samo co Stephen Kitt , ale o wiele mniej wyraźnie. PS Po co zawracać sobie głowę wprowadzeniem PPID do dyskusji, jeśli nie chcesz powiedzieć, jaki jest PPID wątku?
(sleep 120 | sleep 120) &
i sprawdzającTgid
wartości w pliku każdegosleep
procesu/proc/${pid}/status
.Uruchamia to
top
polecenie z kilkoma dodatkowymi opcjami:-H
przesyła zlecenie argumentów góry do wyświetlenia każdego pojedynczego gwintu. Zwykle top podsumowuje wszystkie wątki w procesie nadrzędnym.-b
Argument ma górny bieg w trybie wsadowym - informacje gromadzone są wyświetlane, a następnie przeniesiono do stdout w przeciwieństwie do pracy w trybie interaktywnym i orzeźwiający dane wyświetlane.-b
opcji użytkownik musi podać na górze, ile razy uruchomić, odbywa się to z-n
argumentem, a ostatni argument z iloma uruchomieniami.Dlatego
top -H -b -n 1
instruuje system, aby „uruchomił się na górze, wyświetlił poszczególne wątki, uruchomił w trybie wsadowym i uruchomił tylko raz”.ps
Komenda informuje migawkę aktualnie uruchomionych procesów.-eLf
Argument (może być używany jako-e -L -f
również) rozkłada się w następujący sposób:e
każeps
wyświetlać wszystkie procesy bez względu na to, kto jest ich właścicielem lub ich aktualny status - aktywny, spanie, wstrzymany, oczekiwanie na We / Wy itp.L
mówi,ps
aby pokazać poszczególne wątkif
mówips
do formatowania wyjścia jako wpis w pełnym formacie, aw połączeniu zL
argumentacji NLWP (liczba wątków) i LWP (ID wątku) kolumny są dodawane do wyjścia.źródło
Rozważ proces z PID p1
task_struct
Przedmiotem procesu dziecko będzie miało PPID (rodzic PID) jako P1, a to PID i TGID zestaw do, powiedzmy, P2.task_struct
Przedmiotem wątku P1 będzie miał zestaw PID jak, powiedzmy P3, ale zestaw TGID do P1.źródło