【问题标题】:Where does task_struct get initialized in the Linux kernel?在 Linux 内核中,task_struct 是在哪里初始化的?
【发布时间】:2022-03-29 22:10:26
【问题描述】:

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

【问题讨论】:

    标签: linux linux-kernel linux-device-driver


    【解决方案1】:

    由于在 Linux 中创建新进程的唯一方法是通过 clone() 系统调用(或其他变体,如 fork()),因此没有真正的从头开始“创建新任务”的功能,但肯定有复制现有任务的功能,应用所需的修改。用于此的函数是copy_process(),它使用dup_task_struct() 复制关联的struct task_struct

    然而,这个规则有一个特殊的例外,init 进程(启动后创建的第一个进程)是由内核本身创建的(然后每个其他进程都是由 init 或通过clone() + execve())。 init 任务的task_struct 在编译时静态定义 (see here)。想了解更多可以关注this other answer

    【讨论】:

    • 谢谢!这正是我想要的!
    猜你喜欢
    • 2017-04-18
    • 2021-07-22
    • 2018-07-05
    • 1970-01-01
    • 2020-03-22
    • 2020-06-22
    • 1970-01-01
    • 2014-04-27
    • 2015-06-27
    相关资源
    最近更新 更多