'task_struct'(进程描述符)的元素如何以及何时被初始化。它们是在fork()系统调用之后自动初始化的。
答案 0 :(得分:1)
是," task_struct"一旦fork()系统为子进程完成,内核就会初始化它。
当程序调用fork()系统调用时,内核开始执行其内部主程序" do_fork"。您可以找到完整的源代码(fork.c)here
long do_fork(unsigned long clone_flags,
unsigned long stack_start,
struct pt_regs *regs,
unsigned long stack_size,
int __user *parent_tidptr,
int __user *child_tidptr)
内部" do_fork"确实执行" copy_process"例程,负责初始化子进程的" task_struct" 。它的原型被定义为
static struct task_struct *copy_process(unsigned long clone_flags,
unsigned long stack_start,
unsigned long stack_size,
int __user *child_tidptr,
struct pid *pid,
int trace)
它基本上复制了旧的task_struct并开始更新其中的各种属性。所以一旦fork()系统调用完成,就会有一个新的" task_sturct"对于子进程,它存储有关在执行进程的同时由内核使用的进程的所有重要信息。