c程式問題 作業系統
int value=5;
int main()
{
pid.t pid;
pid = fork();
if (pid == 0)
value +=15;
else if ( pid > 0)
wait(null);
pritf("parent: value = %d",value);
exit(0);
}
}
最近在學作業系統 這是裡面的一題
不過我看了很久 都看不太懂 最後的 value 是指什麼意思
可以請各位高手能夠幫我一下
給我一些提示嗎
那可以請問一下 最後的value 會出現甚麼值嗎 又是怎麼出現的呢
1 Answer
- 丸子Lv 41 decade agoFavorite Answer
int value=5;
int main()
{
pid_t pid;
pid = fork(); // create a new child process
if (pid == 0) // if return child process
value +=15;
else if ( pid > 0) { // if return parent process
wait(null); // wait until child process terminated or stop
pritf("parent: value = %d",value);
exit(0);
}}
這個程式主要在測試 fork() system call. 假設fork()所在的程式為 parent process, 當呼叫 fork() 這支函式時, 程式會從呼叫點開始創造並複製一個新的 child process. child process 與 parent process 之間大致有幾個特性:
1. child process和parent process 各自獨立, 擁有各自的記憶體空間, process ID
2. child process和parent process的內容完全相同, 在 fork()之前所有值都相同, 但各自擁有一份. fork()之後各自獨立執行, 若 parent的值修改, 並不會影響到child, 反之亦然.
由於parent/child是一模一樣的東西, 因此在程式中只能依靠獨立的pid 來判斷現在執行的是哪個process.
若 pid 回傳 0, 表示 child process; 回傳 1 時, 表示parent process; 若回傳負值, 則表示 child process create 失敗.
你可以試著將兩個 process 的 value 都印出來觀察, 就可以發現兩者值修改並不會互相干擾.
2008-04-09 22:14:11 補充:
parent process 會等待 child process執行完後才執行, 所以假設將child/parent值 output, 會依序得到下列值
child process value = 20
parent process value = 5
2008-04-09 22:20:04 補充:
parent process會等到child process執行完後才執行, 假設將child/parent value output觀察, 會依序得到下列值:
child process value=20
parent process value=5
Source(s): no, no