В настоящее время я пытаюсь узнать о fork() и процессах вообще.Fork() не возвращает id> 0 в родительском процессе
У меня есть задача выполнить fork() определенное количество раз - n - которое пользователь может ввести. Кроме того, я должен использовать waitpid(), чтобы дождаться завершения моего процесса. Каждый процесс должен возвращать случайное число Разногласия между 1 и 6.
Вот мой код до сих пор:
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
int main(){
int n,i;
int *returnvalue;
int pid;
int waitingID;
time_t t;
srand((unsigned)time(&t));
printf("How many processes to start?\n");
scanf("%d",&n);
for(i=0; i < n; i++){
pid = fork();
if(pid==0){
printf("I am %d, from iteration %d\n",getpid(), i);
}
else if(pid > 0){
waitingID = waitpid(pid, returnvalue, 0);
printf("Return-value of %d is: %d\n", waitingID, *returnvalue);
}
else{
printf("A problem occured.");
}
}
return rand()%6;
}
Ниже приведен пример вывода текущей программы:
How many processes to start?
5
I am 6449, from iteration 0
I am 6450, from iteration 1
I am 6451, from iteration 2
I am 6452, from iteration 3
I am 6453, from iteration 4
Segmentation fault (core dumped)
Как вы можете видеть, у меня есть несколько проблем:
else if (pid>0)
не называется вообще. Поэтому ожидание не происходит. Разве это не должно быть вызвано в каждой вилке, для соответствующего родительского процесса?
Кроме того, как только последняя итерация закончится и она вернется к возврату, я получаю эту ошибку с разделением (core dumped).
Я потерялся прямо сейчас. Я не могу понять, где моя ошибка.
'fork()' не возвращает 'int' - он возвращает' pid_t'. См. Http://linux.die.net/man/2/fork. В то время как конкретная реализация может определять 'pid_t' как' int', это не означает, что 'pid_t' ** является **' int'. –