Unix操作系統(tǒng)fork 知識
這里我們主要介紹Unix操作系統(tǒng)中的進程。分配給Unix操作系統(tǒng)管理員的許多工作之一是確保用戶的程序正確運行。因為Unix操作系統(tǒng)上存在其他并發(fā)運行的程序,所以此任務(wù)變得更加復(fù)雜。由于種種原因,這些程序可能會失敗、掛起或行為異常。在構(gòu)建更可靠的系統(tǒng)時,了解 UNIX® 環(huán)境如何創(chuàng)建、管理和銷毀這些作業(yè)是至關(guān)重要的步驟。
父 PID (PPID) 的存在意味著這是一個由別的進程創(chuàng)建的進程。最初創(chuàng)建進程的原始進程名為 init,它始終被賦予 PID 1。init 是將在內(nèi)核啟動時啟動的***個實際進程。啟動系統(tǒng)的其余部分是 init 的工作。init 和其他具有 PPID 0 的進程屬于內(nèi)核。
Unix操作系統(tǒng)使用 fork 系統(tǒng)調(diào)用
fork(2) 系統(tǒng)調(diào)用創(chuàng)建一個新進程。清單 2 顯示了一個簡單 C 代碼片段中使用的 fork。
清單 2. 簡單的 fork(2) 用法
           
 
- sunbox$ cat fork1.c
 - #include <unistd.h>
 - #include <stdio.h>
 - int main (void) {
 - pid_t p; /* fork returns type pid_t */
 - p = fork();
 - printf("fork returned %d\n", p);}
 - sunbox$ gcc fork1.c -o fork1
 - sunbox$ ./fork1
 - fork returned 0
 - fork returned 698
 
 
fork1.c 中的代碼不過就是發(fā)出 fork 調(diào)用,并通過一個 printf 調(diào)用來打印整數(shù)結(jié)果。Unix操作系統(tǒng)雖然只發(fā)出了一個調(diào)用,但是打印了兩次輸出。這是因為在 fork 調(diào)用中創(chuàng)建了一個新進程。現(xiàn)在有兩個單獨的進程在從該調(diào)用返回結(jié)果。這通常被描述為“調(diào)用一次,返回兩次”。
fork 返回的值非常有趣。其中一個返回 0;另一個返回一個非零值。獲得 0 的進程稱為子進程,非零結(jié)果屬于Unix操作系統(tǒng)原始進程,即父進程。您將使用返回值來確定哪個是父進程,哪個是子進程。由于兩個進程都在同一空間中繼續(xù)運行,***有實際意義的區(qū)別是從 fork 返回的值。
0 和非零返回值的基本原理在于,子進程始終可以通過 getppid(2) 調(diào)用來找出其父進程是誰,但是父進程要找出它的所有子進程卻很困難。因此,要告訴父進程關(guān)于其新的子進程的信息,而子進程可在需要時查找其父進程。
對Unix操作系統(tǒng)中的父進程的基本知識的介紹就到這里。希望對大家對Unix操作系統(tǒng)的學(xué)習(xí)有所幫助。
【編輯推薦】















 
 
 
 
 
 
 