Linux中的程序建立函式fork

2021-08-17 07:33:40 字數 903 閱讀 9947

linux中的程序通過fork建立,並通過exec執行,分為兩步。

在linux中所有的程序都是pid為1的init程序的子程序,核心在系統啟動的最後階段啟動init程序。系統中的所有程序都有乙個父程序,在程序描述符中有指向父程序的指標,具有同乙個父程序的程序稱為兄弟程序,同時每個程序描述符中還有乙個成為children的子程序鍊錶。實際上你從系統中的任意乙個程序出發就可以找到任意另乙個程序。

fork函式首先拷貝當前程序建立乙個子程序。此時區別僅僅在於pid、ppid和一些系統資源的統計量不同。但是此處的拷貝為寫時拷貝,因為有些資源可能並不是共享的。此時父程序子程序共享乙個記憶體位址空間。只有在寫入的時候程序才會進行拷貝,使得每個程序有乙份自己的拷貝。fork函式有三個返回值:-1表示失敗, 0表示子程序中返回0, 子程序pid則是父程序中返回的子程序pid。通過返回值判斷當前程序是子程序還是父程序。

linux是通過clone()系統呼叫實現的fork函式。clone()這個呼叫通過一系列的標誌來表明父子程序共享的資源。然後clone呼叫do_fork()。do_fork()完成了建立的大部分工作,內部通過呼叫copy_process讓程序執行:

1.在copy_process中,會通過呼叫dup_task_struct方法為子程序分配核心棧、threadinfo以及task_struct。此時子程序與父程序的描述符是一樣的。在dup_task_struct函式中:會為使用核心的slab分配器去為所要建立的程序分配struct_task_struct的空間。而alloc_thread_info使用核心的夥伴系統去為所要建立的程序分配核心棧union-thread-union)空間。

2.子程序使自己與父程序不用,通過alloct_pid為子程序分配乙個程序描述符等操作。

3.最後copy_process為父task_struct中設定指向子程序程序task_struct的指標。

linux程序建立函式簡介

linux將建立程序和執行所建立的程序分為2個階段。第乙個階段是建立。父程序首先複製子程序,所複製出來的子程序擁有自己的任務結構體和系統堆疊,除此之外所有資源都與父程序共享。linux提供兩種方式複製子程序 乙個是fork 另外乙個是clone fork 函式複製時將父程序的所以資源都通過複製資料結...

Linux程序 程序的建立

今天學習了linux的程序建立的基本原理,是基於0.11版本核心的。下面對其作一下簡單的總結。一 linux程序在記憶體中的相關資源 很容易理解,linux程序的建立過程就是記憶體中程序相關資源產生的過程,那麼linux程序在記憶體中有哪些相關資源呢?1 task陣列中的一項 乙個指標指向程序的ta...

Linux 如何建立程序函式與檢視程序

程序就是pcb,意味著建立乙個程序,就是建立乙個pcb pid t fork void 通過複製呼叫程序 父程序 建立乙個新的程序 子程序 建立乙個新的pcb,然後從父程序pcb中複製了很多資料過來複製的主要資訊有記憶體指標,程式計數器,上下文資料。記憶體指標 子程序與父程序執行的 其實是一樣的 指...