程序就是pcb,意味著建立乙個程序,就是建立乙個pcb
pid_t fork(void)
–通過複製呼叫程序(父程序)建立乙個新的程序(子程序)
建立乙個新的pcb,然後從父程序pcb中複製了很多資料過來複製的主要資訊有記憶體指標,程式計數器,上下文資料。
記憶體指標:子程序與父程序執行的**其實是一樣的–指向同一塊物理記憶體中的資料及指令
程式計數器/上下文資料:子程序被建立出來後,執行位置與父程序是完全一樣的,下一步即將執行的指令都是從建立子程序成功之後才開始的。
建立乙個子程序出來是跟父程序做的事情是一樣的,因為他們的執行的**和資料以及當前的執行位置都是一樣的。(子程序建立前父程序的**也會被子程序複製)
fork函式體偽**
fork()
但是這個fork()函式的返回值對於父子程序是不一樣的
在父程序中返回建立的子程序pid
在子程序中返回的是0
所以可以根據返回值來分別執行父子程序的工作
通常根據fork的返回值進行**的分流,讓父子程序進入不同的判斷執行完成不同的功能
pid_t getpid(void)
獲取呼叫者程序的id
**中的pid指的是fork函式的返回值
該函式和fork函式一樣都是在已有程序中建立乙個新的程序,區別主要是:對於fork函式來說,父子程序的執行次序是不確定的,但是對於vfork函式來說會保證子程序先執行,在它呼叫exec函式或者exit函式之後父程序才可能排程執行,子程序在呼叫exec函式或exit函式之前與父程序資料是共享的,也就是共用乙個虛擬位址空間。共用了同一塊虛擬位址空間,就不能同時執行,不然會造成棧混亂,因此子程序先執行,結束後會讓所有函式出棧,繼續執行父程序
從該結果可以得出,子程序執行次序是在父程序之前,並且資料是共享的。
ps -ef
:檢視程序資訊
我們都知道,fork()函式可以建立子程序,那為什麼要建立子程序呢?
建立子程序大多數情況下並不是為了讓子程序做與父程序一樣的事,而是讓子程序去排程另乙個程式的執行,如果這個任務有風險,交給子程序去做,哪怕資料處理出錯崩潰了,也不會影響主線程,保證了主線程的安全。
ps -aux
檢視程序詳細資訊
linux如何查程序 殺程序
1.查程序 ps a 顯示現行終端機下的所有程式,包括其他使用者的程式。ps a 顯示所有程式。ps c 列出程式時,顯示每個程式真正的指令名稱,而不包含路徑,引數或常駐服務的標示。ps e 此引數的效果和指定 a 引數相同。ps e 列出程式時,顯示每個程式所使用的環境變數。ps f 用ascii...
linux如何查程序 殺程序
1.查程序 ps命令查詢與程序相關的pid號 ps a 顯示現行終端機下的所有程式,包括其他使用者的程式。ps a 顯示所有程式。ps c 列出程式時,顯示每個程式真正的指令名稱,而不包含路徑,引數或常駐服務的標示。ps e 此引數的效果和指定 a 引數相同。ps e 列出程式時,顯示每個程式所使用...
linux程序建立函式簡介
linux將建立程序和執行所建立的程序分為2個階段。第乙個階段是建立。父程序首先複製子程序,所複製出來的子程序擁有自己的任務結構體和系統堆疊,除此之外所有資源都與父程序共享。linux提供兩種方式複製子程序 乙個是fork 另外乙個是clone fork 函式複製時將父程序的所以資源都通過複製資料結...