[教育訓練紀錄] fork 多個小孩

jollen 發表於 August 23, 2008 3:48 PM

今天進行「GNU Toolchains & Embedded Linux Programming」課程,在講解 fork 時,有同學問到「能不能 fork 多個 child process」,當然是可以的。後續又有同學問到,「能不能 fork 孫子」,當然也是可以的,只不過,在 child process 裡再 fork child process 並不是很主要的做法,只在一些特殊情況,例如要避免 zombie process 產生時,才會用上。

所以,我們只講解如何 fork 多個 child process 的做法。我們舉了一段 code 當做範例,這段 code 寫得很單純,可以說明 fork 的一些觀念。在這裡,大家必須了解的是「fork 之後」的行為是什麼:

1. parent process 的執行流程
2. child process 的執行流程

接著將以下的程式(n_fork.c)實際上機執行,並觀察執行結果。

n-fork.jpg

執行後出現以下結果:

$ gcc -o n_fork n_fork.c
$ ./n_fork &
This is the child process. PID: 8450
This is the child process. PID: 8451
This is the child process. PID: 8452
Parent process, PID: 8449
Child process ID: 8450 8451 8452

我們用 pstree 指令來觀察執行之後的系統狀態:

nfork-pstree.jpg

後續我們會結合一個 Web server 的練習,來展示 fork 多個 child process 的應用。

Jollen's Blog 使用 Github issues 與讀者交流討論。請點擊上方的文章專屬 issue,或 open a new issue

您可透過電子郵件 jollen@jollen.org,或是 Linkedin 與我連絡。更歡迎使用微信,請搜尋 WeChat ID:jollentw