歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> Unix資訊 >> Unix操作系統fork 知識

Unix操作系統fork 知識

日期:2017/3/6 11:41:23   编辑:Unix資訊

這裡我們主要介紹Unix操作系統中的進程。分配給Unix操作系統管理員的許多工作之一是確保用戶的程序正確運行。因為Unix操作系統上存在其他並發運行的程序,所以此任務變得更加復雜。由於種種原因,這些程序可能會失敗、掛起或行為異常。在構建更可靠的系統時,了解 UNIX® 環境如何創建、管理和銷毀這些作業是至關重要的步驟。

父 PID (PPID) 的存在意味著這是一個由別的進程創建的進程。最初創建進程的原始進程名為 init,它始終被賦予 PID 1。init 是將在內核啟動時啟動的第一個實際進程。啟動系統的其余部分是 init 的工作。init 和其他具有 PPID 0 的進程屬於內核。

Unix操作系統使用 fork 系統調用

fork(2) 系統調用創建一個新進程。清單 2 顯示了一個簡單 C 代碼片段中使用的 fork。

清單 2. 簡單的 fork(2) 用法

  1. sunbox$ cat fork1.c
  2. #include <unistd.h>
  3. #include <stdio.h>
  4. int main (void) {
  5. pid_t p; /* fork returns type pid_t */
  6. p = fork();
  7. printf("fork returned %d\n", p);}
  8. sunbox$ gcc fork1.c -o fork1
  9. sunbox$ ./fork1
  10. fork returned 0
  11. fork returned 698



fork1.c 中的代碼不過就是發出 fork 調用,並通過一個 printf 調用來打印整數結果。Unix操作系統雖然只發出了一個調用,但是打印了兩次輸出。這是因為在 fork 調用中創建了一個新進程。現在有兩個單獨的進程在從該調用返回結果。這通常被描述為“調用一次,返回兩次”。

fork 返回的值非常有趣。其中一個返回 0;另一個返回一個非零值。獲得 0 的進程稱為子進程,非零結果屬於Unix操作系統原始進程,即父進程。您將使用返回值來確定哪個是父進程,哪個是子進程。由於兩個進程都在同一空間中繼續運行,唯一有實際意義的區別是從 fork 返回的值。

0 和非零返回值的基本原理在於,子進程始終可以通過 getppid(2) 調用來找出其父進程是誰,但是父進程要找出它的所有子進程卻很困難。因此,要告訴父進程關於其新的子進程的信息,而子進程可在需要時查找其父進程。

對Unix操作系統中的父進程的基本知識的介紹就到這裡。希望對大家對Unix操作系統的學習有所幫助。

Copyright © Linux教程網 All Rights Reserved