- 论坛徽章:
- 0
|
本帖最后由 javacool 于 2010-10-23 22:28 编辑
最近在看2.6.34的代码,根据以前的说法 init 进程1是除进程0以外的所有进程的父进程
但是在rest_init()函数中,实际上担负后续内核线程建立的kthread_add线程是在线程0中创建的,
也就是说kthread_add以及通过ktread_add建立的其他内核线程,父进程应该都是进程0,不知道我的理解是不是正确的?
另外我查过2.6.11的代码,开始的描述便是正确的,所有除0线程以外,其他进程的父进程因该都是init进程
static noinline void __init_refok rest_init(void)
__releases(kernel_lock)
{
int pid;
rcu_scheduler_starting();
kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND);
numa_default_policy();
pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);
rcu_read_lock();
kthreadd_task = find_task_by_pid_ns(pid, &init_pid_ns);
rcu_read_unlock();
unlock_kernel();
/*
* The boot idle thread must execute schedule()
* at least once to get things moving:
*/
init_idle_bootup_task(current);
preempt_enable_no_resched();
schedule();
preempt_disable();
/* Call into cpu_idle with preempt disabled */
cpu_idle();
} |
|