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();
}2.6.22以前沒有kthreadd這個執行緒,那麼除了程序0外,其他程序都是init程序
或其子程序不斷fork出來的。
2.6.22及以後,很多核心執行緒由kthreadd執行緒create_kthread出來。
看,下面很多核心執行緒的父程序都是2, kthreadd的pid = 2;
[lu@localhost ~]$ ps -ef
uid pid ppid c stime tty time cmd
root 1 0 0 09:20 ? 00:00:01 /sbin/init
root 2 0 0 09:20 ? 00:00:00 [kthreadd]
root 3 2 0 09:20 ? 00:00:00 [ksoftirqd/0]
root 4 2 0 09:20 ? 00:00:00 [watchdog/0]
root 5 2 0 09:20 ? 00:00:00 [events/0]
root 6 2 0 09:20 ? 00:00:00 [cpuset]
root 7 2 0 09:20 ? 00:00:00 [khelper]
root 10 2 0 09:20 ? 00:00:00 [async/mgr]
root 259 2 0 09:20 ? 00:00:01 [kblockd/0]
linux普通程序,後台程序,守護程序
預設情況下,程序是在前台執行的,這時就把shell給佔據了,我們無法進行其它操作。對於那些沒有互動的程序,很多時候,我們希望將其在後台啟動,可以在啟動引數的時候加乙個 實現這個目的 1 21304 starting zookeeper started 1 done zkserver.sh start...
linux 輕量級程序與普通程序的區別
核心執行緒只執行在核心態,不受使用者態上下文的拖累。處理器競爭 可以在全系統範圍內競爭處理器資源 使用資源 唯一使用的資源是核心棧和上下文切換時保持暫存器的空間 排程 排程的開銷可能和程序自身差不多昂貴 同步效率 資源的同步和資料共享比整個程序的資料同步和共享要低一些。輕量級程序 輕量級程序 lwp...
linux的核心程序 執行緒
linux啟動後,核心自動執行如下執行緒 程序 核心其實是不區分程序和執行緒的。idle程序 pid 0。系統的啟動程序。啟動後負責程序的排程。init程序 pid 1。由idle程序建立,首先負責系統的啟動。負責啟動所有其他程序。啟動後變成守護程序,用於監視其他所有程序和使用者程序的啟動。所有使用...