https://stackoverflow.com/questions/58370707/what-is-the-thread-group-leader-name-in-the-proc-file-systemTy cesty v procfs jsou popsány v prvním komentáři.
Kernel provozuje v zásadě vlákna / threads. "Aby se to nepletlo", tak klíčový kernelový objekt, který drží informaci o jednom konkrétním vlákně, např. má atribut thread_id, se jmenuje "struct task_struct" :-(
https://chengyihe.wordpress.com/2015/12/29/kernel-thread-and-thread-group/User-space process pasuje na kernelovou "thread group", z toho jedno vlákno je "thread group leader" = jeho TID figuruje též jako PID za celou skupinu, jinak ale thread group leader nemá žádné výsadní postavení. Je to prostě první vlákno programu, kterým začalo provádění programu (procesu). Pokud mohu soudit, "thread group" nemá žádný svůj objekt (struct), který by se instancioval - pouze thread group leader ve svém "struct task_struct" obsahuje pointer
struct task_struct *group_leader;
...plus dva list-heady pro dětičky a sourozence.
Takhle to figuruje v kernelu. User space (libpthread resp. NPTL v rámci libc) nad tím pentlí nějaké svoje mírně odlišné názvosloví.
A závěrem kvízová otázka pro chtré hlavičky, jestli dávaly pozor: co je to "struct task_group" ? Inu
není to objekt pro "thread group" nebo-li kernelový pohled na rozvlákněný proces. Je to struct pro "control group" = skupinu procesů, která patří přihlášené terminálové relaci...
Připadá to někomu srozumitelné? :-D
Ve starší linuxové implementaci phtreadů (linux-threads, v linuxu 2.4) volání getpid() vracelo v každém vlákně jiný PID, tzn. ID vlákna. Tentýž kód zkompilovaný pro Linux 2.6/NPTL vracel ve všech vláknech tentýž PID. Takže když jsem chtěl držet seznam vláken podle jejich vlastních ID, pídil jsem se, kde ho vezmu - a ejhle, během nějaké doby probublal do user-space hlavičkového souboru s kernelovými syscally nový syscall gettid(). Dále pthread_create() od téhož okamžiku už nevrací PID, ale pointer na struct... (toto se skrývá pod typedefem pthread_t).
viz též man getpid, man gettid