【发布时间】:2022-03-29 22:10:26
【问题描述】:
是否有一个函数被调用来初始化(至少一些)task_struct 的值?或者是否有任何其他函数在创建任务(特别是用户空间进程)时被调用?
【问题讨论】:
标签: linux linux-kernel linux-device-driver
是否有一个函数被调用来初始化(至少一些)task_struct 的值?或者是否有任何其他函数在创建任务(特别是用户空间进程)时被调用?
【问题讨论】:
标签: linux linux-kernel linux-device-driver
由于在 Linux 中创建新进程的唯一方法是通过 clone() 系统调用(或其他变体,如 fork()),因此没有真正的从头开始“创建新任务”的功能,但肯定有复制现有任务的功能,应用所需的修改。用于此的函数是copy_process(),它使用dup_task_struct() 复制关联的struct task_struct。
然而,这个规则有一个特殊的例外,init 进程(启动后创建的第一个进程)是由内核本身创建的(然后每个其他进程都是由 init 或通过clone() + execve())。 init 任务的task_struct 在编译时静态定义 (see here)。想了解更多可以关注this other answer。
【讨论】: