मैं एक होमवर्क असाइनमेंट मैं कहाँ 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...
आप एक ही पाश में दो बार forking कर रहे हैं, आपको लगता है कि पता है? –
नोप कैसे आते हैं, क्या वह ... था? : < –
आपने एक कांटा बम बनाया है। आपको कुछ ऐसा करना चाहिए: pid = कांटा(); अगर (पीआईडी <0) ...; अगर (पीआईडी == 0) .... – kofemann