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

作者: ifooleru (i服了u)   2014-11-16 20:54:56
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;
pid = fork();
if (pid == 0) {
for (i = 0; i < SIZE; i++) {
nums[i] *= -i;
printf(" %d ", nums[i]); /* LINE X */
}
}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該怎麼一步步解釋?
謝謝
作者: A4P8T6X9 (殘廢的名偵探)   2014-11-16 21:29:00
pid=0 是孩子,然後孩子改了不會影響父親的。
作者: qoozxc789 (呵呵)   2014-11-16 21:38:00
不是要看題目有沒有假設變數是否共享嗎
作者: j897495 (咪咪)   2014-11-16 22:01:00
我想知道X和Z的答案 是各有五行嗎?0 -1 -2 -3 -4。1999。0 -1 -2 -3 -4?
作者: A4P8T6X9 (殘廢的名偵探)   2014-11-16 22:15:00
做完fork都變成兩個process了,你有看過一個process改自己的東西可以順便改其他人的?就好像開兩個IE,雖然都是IE,可是一個看YAHOO不影響一個看GOOGLE阿。
作者: qoozxc789 (呵呵)   2014-11-16 23:54:00
洪逸的筆記有寫到有些題目可能會假設變數為共享 當然實際上真的要share就要另外處理了 不過我翻了他書的後面考古題好像也沒有出現過 所以...就當我沒說過吧:d

Links booklink

Contact Us: admin [ a t ] ucptt.com