Nie istnieje żaden przenośny sposób na wyliczenie wątków w procesie.
Linux ma pthread_kill_other_threads_np
, który wygląda jak resztka z oryginalnej implementacji pthreads o czysto użytkownika, która może działać, ale nie musi być udokumentowana. Nie mówi ci, ile wątków było.
Możesz uzyskać wiele informacji o swoim procesie, szukając w /proc/self
(lub, w przypadku innych procesów, /proc/123
). Chociaż wiele unice ma plik lub katalog o tej nazwie, układ jest zupełnie inny, więc każdy kod używający /proc
będzie zależał od Linuksa. Dokumentacja /proc
jest w Documentation/filesystems/proc.txt
w źródle jądra. W szczególności, /proc/self/task
ma podkatalog dla każdego wątku. Nazwa podkatalogu jest identyfikatorem LWP; niestety [1][2][3] nie wydaje się być sposób skojarzyć identyfikatory LWP z Pthread identyfikatorów (ale można dostać swój własny identyfikator wątku z gettid(2)
jeśli pracujesz dla niego). Oczywiście czytanie /proc/self/task
nie jest atomowe; liczba wątków jest dostępna atomicznie przez /proc/self/status
(ale oczywiście może się zmienić, zanim podejmiesz odpowiednie działania).
Jeśli nie możesz osiągnąć tego, czego chcesz, dzięki ograniczonemu wsparciu otrzymywanemu od pthreadów na Linuksie, kolejną taktyką jest granie w dynamiczne triki łączące, aby zapewnić własną wersję pthread_create
, która loguje się do struktury danych, którą możesz później sprawdzić.
bardzo dziękuję za odpowiedź. Podoba mi się twoje ostatnie rozwiązanie. Zbadam to trochę. Wolałbym unikać czytania/proc/stuff głównie z powodu problemów z przenośnością. –