我的問題是:爲什麼我的進程不能同時運行?
1.)我怎樣才能讓父進程總是最後死去?我知道這是沒有完成的,因爲父母是第一個運行的pid,但我不知道如何改變它。
2.)我如何讓我的子進程與他同時執行?我甚至把這個數字看得很高,看看它是不是巧合,但它似乎不是。
編輯:SOLUTIONS
1)加入等待(NULL)在兩次內默認
2.)發生了什麼。用睡眠(1)來證明它。
我的代碼如下
#include <stdio.h>
int main() {
int pid, i;
pid = fork();
switch(pid) {
case -1:
// error
printf("Fork error");
break;
case 0:
// child process
printf("First child is born, my pid is %d\n", getpid());
for(i=1; i<10; i++)
printf("First child executes iteration %d\n", i);
printf("First child dies quietly.\n");
break;
default:
// parent process
printf("Parent process is born, my pid is %d\n", getpid());
pid = fork();
switch(pid) {
case -1:
// error
printf("Fork error");
break;
case 0:
// child process
printf("Second child is born, my pid is %d\n", getpid());
for(i=1; i<10; i++)
printf("Second child executes iteration %d\n", i);
printf("Second child dies quietly.\n");
break;
default:
// parent process
printf("Parent process dies quietly.");
}
}
return 0;
}
我總是輸出看起來像這樣:
Parent process is born, my pid is 7847 First child is born, my pid is 7848 First child executes iteration: 1 First child executes iteration: 2 First child executes iteration: 3 First child executes iteration: 4 First child executes iteration: 5 First child executes iteration: 6 First child executes iteration: 7 First child executes iteration: 8 First child executes iteration: 9 First child executes iteration: 10 First child dies quietly. Parent process dies quietly. Second child is born, my pid is 7849 Second child executes iteration 1 Second child executes iteration 2 Second child executes iteration 3 Second child executes iteration 4 Second child executes iteration 5 Second child executes iteration 6 Second child executes iteration 7 Second child executes iteration 8 Second child executes iteration 9 Second child executes iteration 10 Second child dies quietly.
我的任務是:
編寫一個C語言程序( 「procs.c」),其創建三個進程:創建兩個子進程的父進程。
的第一個孩子應該做到以下幾點:
顯示「第一個孩子出生後,我的pid是......」
顯示十倍的消息「第一個孩子來執行迭代X」 ,其中X是迭代次數
顯示「第一個孩子安靜地死亡。」
第二個孩子應該做到以下幾點:
顯示「第二個孩子出生後,我的pid是......」
顯示十倍的消息「老二執行迭代X「,其中X是迭代次數
顯示」第二個孩子安靜地死亡。「
父進程應該做到以下幾點:
顯示 「父進程是天生的,我的pid是......」
創建的第一個孩子
創建第二個孩子
display「Parent過程悄然死亡。「
使用gcc編譯程序並將其命名爲可執行的‘特效’執行程序數次,並注意如何將兩個孩子的輸出隔行
這項計劃的一個可能的輸出是:。
nova> ./procs Parent process is born, my pid is 7847 First child is born, my pid is 7848 First child executes iteration: 1 First child executes iteration: 2 First child executes iteration: 3 First child executes iteration: 4 First child executes iteration: 5 Second child is born, my pid is 7849 Second child executes iteration 1 Second child executes iteration 2 Second child executes iteration 3 First child executes iteration: 6 Second child executes iteration 4 Second child executes iteration 5 Second child executes iteration 6 First child executes iteration: 7 Second child executes iteration 7 Second child executes iteration 8 Second child executes iteration 9 Second child executes iteration 10 Second child dies quietly. First child executes iteration: 8 First child executes iteration: 9 First child executes iteration: 10 First child dies quietly. Parent process dies quietly.
我的書有一個和我一樣的例子,除了default還有一個for循環。結果通常看起來像parent1,parent2,child1,child2,child3,child4,parent3等。在我的第一個孩子的執行過程中,爲什麼不是第二個孩子開始執行? –
你的機器速度太快了。 –
謝謝。你的幫助激勵我將睡眠(1)放入我的孩子的過程中,以證明他們同時在跑步。 –