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如果您想了解更多。
是否有一个函数被调用来初始化 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如果您想了解更多。