依據程式,建立CentOS中加以執行,觀察執行結果後研判在標註 A/B/C/D 四處之輸出的值將各為什麼? 並加以說明。(假設其中各行程原有 pid 值,父行程為 6200,而子行程為 6203)
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
[student@iStudent ~]$ ls
a.out test2.c test.c 公共 影片 桌面 音樂
homework.c test3.c 下載 圖片 文件 模板
[student@iStudent ~]$ cc homework.c
[student@iStudent ~]$ ./a.out
child: pid = 0child: pid1 = 3074parent: pid = 3074parent: pid1 = 3073[student@iStudent ~]$
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;
}
以下是我跑出來的結果:
[student@iStudent ~]$ ls
a.out test2.c test.c 公共 影片 桌面 音樂
homework.c test3.c 下載 圖片 文件 模板
[student@iStudent ~]$ cc homework.c
[student@iStudent ~]$ ./a.out
child: pid = 0child: pid1 = 3074parent: pid = 3074parent: pid1 = 3073[student@iStudent ~]$
請問有高手可以幫我指正哪邊錯誤嗎?感恩!
程式改成
#include <sys/types.h>
#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("(A)child: pid = %d\n",pid); /* A */
printf("(B)child: pid1 = %d\n",pid1); /* B */
}
else { /* parent process */
pid1 = getpid();
printf("(C)parent: pid = %d\n",pid); /* C */
printf("(D)parent: pid1 = %d\n",pid1); /* D */
// wait(NULL);
}
return 0;
}
執行結果
(C)parent: pid = 80651
(D)parent: pid1 = 80649
(A)child: pid = 0
(B)child: pid1 = 80651
對照題目(6200, 6203),可得
A=0
B=6203
C=6203
D=6200