私はfork()
を使用しなければならない宿題を作ろうとしていますが、なぜforループでそれらを実行した後にフォークを停止できないのか分かりません:for()ループ内のfork()
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
int main(int argc, char *argv[]){
int limit = argc/2;
if(argc%2 == 0){
perror("the number of arguments given must pe even!");
exit(1);
}
int i;
for(i=0; i<=limit; i++){
if(fork()==-1){
perror("childes couldn't be created\n");
exit(1);
}
if(fork()==0){
printf("fork: %d \n",i);
exit(1);
}
wait(0);
}
printf("exiting...\n");
return 0;
}
出力:
[email protected]:~/OS/UprocH$ ./exe a b c d
fork: 0
fork: 0
fork: 1
fork: 1
fork: 1
fork: 2
fork: 2
fork: 1
fork: 2
exiting...
exiting...
fork: 2
exiting...
exiting...
fork: 2
exiting...
exiting...
exiting...
[email protected]:~/OS/UprocH$ fork: 2
fork: 2
fork: 2
exiting...
同じループで2回フォークしていますか? –
いいえ、どうしたの? :< –
あなたはフォークボムを作成しました。次のようなことを行うべきです:pid = fork(); if(pid <0)...; (fork()== 0) '< - 第2のフォーク。if(pid == 0).... – kofemann