# Thread - The Linux kernel utilizes the `task_struct` structure, which can be viewed [here](https://web.git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/linux/sched.h) to manage threads. ```c= struct task_struct { ... pid_t pid; pid_t tgid; ... } ``` - Every *thread* in a *Thread Group* maps to a task structure in the kernel. - The `pid` variable correspond to a thread ID, and `tgid`, meaning *Thread Group ID* corresponds to a process ID. | User layer | System call | Variable mapped in Kernel <br/> `task_struct` structure | | :--------: | :--------: | :--------: | | Thread ID | pid_t gettid(void) | pid_t pid | | Process ID | pid_t getpid(void) | pid_t tgid | - Use the following command to retrieve the information about threads, where `LWP` represents the thread ID and `NLWP` indicates the *Number of LWP*s. Additionally, the process *systemd+* is multi-thread, with four threads having thread IDs 1195, 1358, 1359,and 1360. ```shell= $ ps -eLF -L F S UID PID PPID LWP C NLWP PRI NI ADDR SZ WCHAN STIME TTY TIME CMD 4 S syslog 1295 1 1295 0 4 80 0 - 55647 - 14:43 ? 00:00:00 /usr/sbin/rsyslogd -n -iNONE 1 S syslog 1295 1 1358 0 4 80 0 - 55647 - 14:43 ? 00:00:00 /usr/sbin/rsyslogd -n -iNONE 1 S syslog 1295 1 1359 0 4 80 0 - 55647 - 14:43 ? 00:00:00 /usr/sbin/rsyslogd -n -iNONE 1 S syslog 1295 1 1360 0 4 80 0 - 55647 - 14:43 ? 00:00:00 /usr/sbin/rsyslogd -n -iNONE ``` - Use the following command to search for all threads of a given process ID. `procfs` creates a subdirectory for each thread in the `/proc/PID/task` path. ```shell= $ ll /proc/1295/task total 0 dr-xr-xr-x 6 syslog syslog 0 3月 20 22:44 ./ dr-xr-xr-x 9 syslog syslog 0 3月 20 14:43 ../ dr-xr-xr-x 7 syslog syslog 0 3月 20 22:44 1295/ dr-xr-xr-x 7 syslog syslog 0 3月 20 22:44 1358/ dr-xr-xr-x 7 syslog syslog 0 3月 20 22:44 1359/ dr-xr-xr-x 7 syslog syslog 0 3月 20 22:44 1360/ ``` # Reference - [index : kernel/git/torvalds/linux.git](https://web.git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/linux/sched.h) - [gettid(2) — Linux manual page](https://man7.org/linux/man-pages/man2/gettid.2.html)