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 }