80 likes | 316 Views
作業系統作業訂正. 資工三甲 49852011 張任頡. Q 3.10 包含最初父行程,下列程式建立多少行程 ?. #include<stdio.h> #include<unistd.h> int main() { /* fork a child process */ fork(); /* fork another child process */ fork(); /*and fork another */ fork(); return 0; }. Answer 3.10.
E N D
作業系統作業訂正 資工三甲 49852011 張任頡
Q 3.10 包含最初父行程,下列程式建立多少行程? #include<stdio.h> #include<unistd.h> int main() { /* fork a child process */ fork(); /* fork another child process */ fork(); /*and fork another */ fork(); return 0; }
Q 3.11使用下列程式,以辨認pid的值在行A、B 、C 和D。( 假定實際父行程與子行程的pids分別為2600和2603 ) #include<stdio.h> #include<unistd.h> int main() { pid_t pid, pid1; /* fork a child process */ pid = fork(); if ( pid < 0) { /* error occurred */ fprintf ( stderr, “Fork Failed ”) ; return 1; } else if (pid == 0) { /* child process */ pid1 = getpid(); printf("child : pid = %d",pid); /* A */ printf("child : pid1 = %d",pid1); /* B */ } else { /* parent process */ pid1 = getpid(); printf("parent : pid = %d",pid); /* C */ printf("parent : pid1 = %d",pid1); /* D */ wait(NULL); } return 0; }
Answer 3.11 A : pid = 0 →子行程本身的值(fork 回傳的值) B : pid1 = 2603 → 子行程真正的值 C : pid = 2603 → 子行程的值(fork 回傳後的值) D : pid1 = 2600 → 父行程真正的值
Q 3.12 使用下列程式解釋Line A將輸出什麼 #include<sys/types.h> #include<stdio.h> #include<unistd.h> int value=5; int main(void) { pid_t pid; pid=fork(); if (pid==0) { /* child process */ value+=15; return 0; } else if (pid>0) { /* parent process */ wait(NULL); printf("PARENT: value = %d \n",value); /* Line A */ return 0; } }
Answer 3.12 PARENT: value = 5 子行程的value不影響父行程的value 雖然子行程改變value 的值 但是父行程的value 值仍是5。