Re: [理工] 作業系統的process forking原理

作者: HiltonCool (野獸瘋)   2014-11-17 00:21:26
※ 引述《ifooleru (i服了u)》之銘言:
: Suppose that the process id of parent process and child process are 1999 and 2013 respectively. List the output generated at Line X, Y and Z.
: 父,子行程的process id 分別為1999 以及2013。請寫出Line X, Y and Z 的輸出。
: #include <sys/types.h>
: #include <stdio.h>
: #include <unistd.h>
: #define SIZE 5
: int nums[SIZE] = {0, 1, 2, 3, 4};
: int main()
: {
: int i;
: pid_t pid;
//create a new process
: pid = fork();
//child process
: if (pid == 0) {
: for (i = 0; i < SIZE; i++) {
: nums[i] *= -i;
: printf(" %d ", nums[i]); /* LINE X */
: }
//parent process
: }else if (pid > 0) {
: printf("My Process ID is %d \n", getpid()); /* LINE Y */
: wait(NULL);
: for (i = 0; i < SIZE; i++)
: printf(" %d ", nums[i]); /* LINE Z */
: }
: return 0;
: }
: 上面這個習題找不到講義或有用的網頁來了解原理
: 請問有人知道創造pid的forking該怎麼一步步解釋?
: 謝謝
首先main(parent process)先fork一個process(child process)
然後parent與child再各自執行自己的工作
雖然parent會等child工作結束後再執行for迴圈
但parent與child的nums陣列初始值皆為0,1,2,3,4
即使child更改了陣列內容也只會影響他自己的陣列內容而已
並不會影響到parent的陣列內容
所以parent與child會印出的內容如下:
child process => output:"0"
"-1"
"-4"
"-9"
"-16"
parent process => output:"My Process ID is 1999"
"0"
"1"
"2"
"3"
"4"
以上只是列出parent與child會印出的內容
整個程式執行結束後正確印出的內容如下:
"0" "My Process ID is 1999"
"-1" "0"
"-4" "-1"
"-9" "-4"
"-16" "-9"
"My Process ID is 1999" 或 "-16"
"0" "0"
"1" "1"
"2" "2"
"3" "3"
"4" "4"
雖然題目只是要求LINE X,Y,Z的值
但我把上述程式執行過程一並列出
可能會讓你比較容易理解整個執行的過程
如有錯誤的地方再麻煩大家更正
作者: j897495 (咪咪)   2014-11-17 10:46:00
怎麼知道父的num[i]值是多少 他沒給條件耶@@
作者: HiltonCool (野獸瘋)   2014-11-17 11:29:00
初始值不是0,1,2,3,4嗎?
作者: j897495 (咪咪)   2014-11-17 15:23:00
我漏看了 謝謝你詳細教學:D

Links booklink

Contact Us: admin [ a t ] ucptt.com