我在使用一个简单的循环fork()程序时遇到了一些问题,我正在尝试制作,我需要一些帮助。
事情是:我想要一个父亲和三个孩子。每个孩子等待1到10之间的随机时间,然后打印他们的PID。之后他们死了,但是他们会立即替换为其他孩子做同样的事情,所以最后总会有三个孩子在屏幕上打印他们的PID。父亲每3秒打印一次孩子的数量。
这就是我想要的,但程序运行不正常。我知道我做错了什么?
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>
#include <errno.h>
#include <time.h>
#include <stdlib.h>
#include <sys/wait.h>
int numero_procesos_hijos = 0;
void manejador_SIGCHLD(int sig)
{
pid_t pid_hijo;
int e;
do {
pid_hijo = wait3(&e, WNOHANG, NULL);
if ((pid_hijo > (pid_t)0) && (WIFEXITED(e) || WIFSIGNALED(e)))
numero_procesos_hijos--;
} while (pid_hijo > (pid_t)0);
}
int main(void)
{
pid_t pid_hijo;
srand(time(NULL));
fflush(NULL);
if (signal(SIGCHLD, manejador_SIGCHLD) == SIG_ERR){
perror("error en signal");
exit(1);
}
do{
if (numero_procesos_hijos < 3)
{
pid_hijo = fork();
if (pid_hijo == -1){
perror("Error en la creacion del fork");
exit(1);
}
if (pid_hijo == 0){ /* Hijo */
sleep(rand() % 10 + 1);
printf("Soy el hijo con el PID %d\n", getpid());
}
numero_procesos_hijos++;
}
if (pid_hijo > 0){ /* Padre */
sleep(3);
printf("Numero procesos hijos: %d\n", numero_procesos_hijos);
}
} while (1);
}