task_struct 在 Linux 内核的什么地方被初始化?

Where does task_struct get initialized in the Linux kernel?

是否有一个函数被调用来初始化 task_struct 的(至少一些)值?或者是否有任何其他函数在创建任务(特别是用户-space 进程)时被调用?

由于在 Linux 中创建新进程的唯一方法是通过 clone() 系统调用(或 fork() 等其他变体),因此没有真正的功能来“创建一个新任务”,但确实有一个函数可以 复制 现有任务,应用所需的修改。用于此的函数是 copy_process(), which uses dup_task_struct() 以复制关联的 struct task_struct.

但是这个规则有一个特殊的例外,init 进程(引导后创建的第一个进程)是由内核本身创建的(每个其他进程然后由 init 或 init 的某个子进程通过 clone() + execve())。初始化任务的task_struct在编译时静态定义see here). You can look at this other answer如果您想了解更多。