如何初始化进程描述符

时间:2014-03-30 13:22:23

标签: linux process fork

'task_struct'(进程描述符)的元素如何以及何时被初始化。它们是在fork()系统调用之后自动初始化的。

1 个答案:

答案 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"对于子进程,它存储有关在执行进程的同时由内核使用的进程的所有重要信息。