1 /*根据当前进程号,获取进程下线程数目*/
2 int get_max_thread_count()
3 {
4 char filename[FILENAME_MAX];
5 snprintf(filename, sizeof(filename)-1, "/proc/%u/stat", getpid());
6
7 FILE* fp = fopen(filename, "r");
8 if (NULL == fp) return -1;
9
10
11 char line[LINE_MAX];
12 int filed_number = 38;
13 process_info_t process_info;
14 char* linep = fgets(line, sizeof(line)-1, fp);
15
16 if (NULL == linep) return -1;
17 sscanf(line, "%d%s%s%d%d"
18 "%d%d%d%u%lu"
19 "%lu%lu%lu%lu%lu"
20 "%ld%ld%ld%ld%ld"
21 "%ld%lld%lu%ld%lu"
22 "%lu%lu%lu%lu%lu"
23 "%lu%lu%lu%lu%lu"
24 "%lu%d%d"
25 /** 01 */ ,&process_info.pid
26 /** 02 */ , process_info.comm
27 /** 03 */ ,&process_info.state
28 /** 04 */ ,&process_info.ppid
29 /** 05 */ ,&process_info.pgrp
30 /** 06 */ ,&process_info.session
31 /** 07 */ ,&process_info.tty_nr
32 /** 08 */ ,&process_info.tpgid
33 /** 09 */ ,&process_info.flags
34 /** 10 */ ,&process_info.minflt
35 /** 11 */ ,&process_info.cminflt
36 /** 12 */ ,&process_info.majflt
37 /** 13 */ ,&process_info.cmajflt
38 /** 14 */ ,&process_info.utime
39 /** 15 */ ,&process_info.stime
40 /** 16 */ ,&process_info.cutime
41 /** 17 */ ,&process_info.cstime
42 /** 18 */ ,&process_info.priority
43 /** 19 */ ,&process_info.nice
44 /** 20 */ ,&process_info.num_threads
45 /** 21 */ ,&process_info.itrealvalue
46 /** 22 */ ,&process_info.starttime
47 /** 23 */ ,&process_info.vsize
48 /** 24 */ ,&process_info.rss
49 /** 25 */ ,&process_info.rlim
50 /** 26 */ ,&process_info.startcode
51 /** 27 */ ,&process_info.endcode
52 /** 28 */ ,&process_info.startstack
53 /** 29 */ ,&process_info.kstkesp
54 /** 30 */ ,&process_info.kstkeip
55 /** 31 */ ,&process_info.signal
56 /** 32 */ ,&process_info.blocked
57 /** 33 */ ,&process_info.sigignore
58 /** 34 */ ,&process_info.sigcatch
59 /** 35 */ ,&process_info.nswap
60 /** 36 */ ,&process_info.cnswap
61 /** 37 */ ,&process_info.exit_signal
62 /** 38 */ ,&process_info.processor);
63
64
65 fclose(fp);
66 return process_info.num_threads;
67 }