这段代码来自Linux头文件/fs/proc/array.c
。 int whole
参数是什么意思? 我想知道为什么有时候需要从sig_struct
累加min_flt
和maj_flt
,而sig_struct
只需要直接从task_struct
读取它们的值
346 static int do_task_stat(struct seq_file *m, struct pid_namespace *ns, 347 struct pid *pid, struct task_struct *task, int whole) ... 406 /* add up live thread stats at the group level */ 407 if (whole) { 408 struct task_struct *t = task; 409 do { 410 min_flt += t->min_flt; 411 maj_flt += t->maj_flt; 412 gtime = cputime_add(gtime, t->gtime); 413 t = next_thread(t); 414 } while (t != task); 415 416 min_flt += sig->min_flt; 417 maj_flt += sig->maj_flt; 418 thread_group_times(task, &utime, &stime); 419 gtime = cputime_add(gtime, sig->gtime); 420 } ... 431 if (!whole) { 432 min_flt = task->min_flt; 433 maj_flt = task->maj_flt; 434 task_times(task, &utime, &stime); 435 gtime = task->gtime; 436 }
“整体”只是一个参数名称,在这种情况下,它似乎表示“整个线程组的do_task_stat
”。
do_task_stat
是一个仅在/fs/proc/array.c
中使用的静态函数。它在两个地方使用: proc_tid_stat
(TID是“线程ID”)和proc_tgid_stat
(TGID是“线程组ID”)。
请参阅Linux – 线程和进程以更好地解释线程组。