fork-question-1.c
/*
* Solution to question 3.1
*
* Answer is 5 as the child and parent processes
* each have their own copy of value.
*/
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h> /* greggagne沒加,會有 warning: implicit declaration of function 'wait' */
int value = 5;
int main()
{
pid_t pid; /* 定義一個變量 pid 用於存儲 fork() 函數的返回值 */
pid = fork(); /* 調用 fork() 函數來創建一個新的子進程。fork() 返回兩次:在父進程中返回子進程的 PID,在子進程中返回 0。 */
/* 如果 pid 等於 0,則表示當前進程是子進程。子進程將 value 的值增加 15,變為 20,然後結束 */
if (pid == 0) { /* child process */
value += 15;
return 0;
}
/* 如果 pid 大於 0,則表示當前進程是父進程。父進程會調用 wait(NULL) 等待子進程結束,然後印出 value 的值 */
else if (pid > 0) { /* parent process */
wait(NULL);
printf ("PARENT: value = %d\n",value); /* LINE A */
return 0;
}
}
在父進程中,value 的值仍然是 5,因為父進程和子進程各自擁有自己的 value 複製品。子進程對 value 的修改不會影響父進程的 value。
Terminal
編譯並執行
gcc -o fork-question-1 fork-question-1.c
./fork-question-1
結果:
參考:greggagne/OSC9e/ch3/fork-question-1.c