多线程的话,如果没有设置每个线程的名字,默认的是进程的名字。为每个线程设置名字,比较好管理和调试
下面的代码显示了如何设置线程的名字:
#include <stdio.h> #include <pthread.h> #include <sys/prctl.h> void *foo(void *arg) { int idx = arg; printf("idx = %d\n", idx); switch(idx) { case 1: prctl(PR_SET_NAME, "ThreadName1"); break; case 2: prctl(PR_SET_NAME, "ThreadName2"); break; case 3: prctl(PR_SET_NAME, "ThreadName3"); break; default: break; } sleep(50); return 0; } int main(void) { pthread_t threadIdx[3]; int threadArgIdx[] = {1, 2, 3}; int i; for(i = 0; i < 3; i++) { pthread_create(threadIdx + i, NULL, foo, (void *)threadArgIdx[i]); } for(i = 0; i < 3; i++) { pthread_join(threadIdx[i], NULL); } return 0; }
charles@taotao:~$ ./a.out & [1] 6705
charles@taotao:~$ ps -eL -o pid,user,lwp,comm PID USER LWP COMMAND 1 root 1 init 2 root 2 kthreadd 3 root 3 ksoftirqd/0 3965 charles 3965 pager 6206 root 6206 kworker/2:0 6250 root 6250 kworker/1:1 6251 root 6251 kworker/3:2 6477 root 6477 kworker/0:0 6558 root 6558 kworker/0:2 6575 root 6575 kworker/u:2 6655 root 6655 kworker/0:1 6699 root 6699 kworker/u:0 6705 charles 6705 a.out 6705 charles 6706 ThreadName1 6705 charles 6707 ThreadName2 6705 charles 6708 ThreadName3 6709 charles 6709 ps或者,top -p {pid},然后按 H:
top - 01:26:32 up 2:47, 3 users, load average: 0.26, 0.45, 0.58 Tasks: 4 total, 0 running, 4 sleeping, 0 stopped, 0 zombie Cpu(s): 2.0%us, 0.6%sy, 0.0%ni, 97.1%id, 0.3%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 4080452k total, 3804064k used, 276388k free, 711012k buffers Swap: 1999868k total, 0k used, 1999868k free, 2450684k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 6722 charles 20 0 26836 316 248 S 0.0 0.0 0:00.00 a.out 6723 charles 20 0 26836 316 248 S 0.0 0.0 0:00.00 ThreadName1 6724 charles 20 0 26836 316 248 S 0.0 0.0 0:00.00 ThreadName2 6725 charles 20 0 26836 316 248 S 0.0 0.0 0:00.00 ThreadName3