- 論壇徽章:
- 0
|
本帖最后由 javacool 于 2010-10-23 22:28 編輯
最近在看2.6.34的代碼,根據(jù)以前的說法 init 進(jìn)程1是除進(jìn)程0以外的所有進(jìn)程的父進(jìn)程
但是在rest_init()函數(shù)中,實(shí)際上擔(dān)負(fù)后續(xù)內(nèi)核線程建立的kthread_add線程是在線程0中創(chuàng)建的,
也就是說kthread_add以及通過ktread_add建立的其他內(nèi)核線程,父進(jìn)程應(yīng)該都是進(jìn)程0,不知道我的理解是不是正確的?
另外我查過2.6.11的代碼,開始的描述便是正確的,所有除0線程以外,其他進(jìn)程的父進(jìn)程因該都是init進(jìn)程
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();
} |
|