c++ - varios - Proceso de hijos y padres con un tenedor()
padres separados con bebe recien nacido (1)
Crea una variable global:
int my_number;
Luego en tu ciclo que crea los hijos, haz:
if (child_pid == 0) {
my_number = i;
break;
}
Entonces puedes usar la variable en el controlador:
void handler(int sig) {
printf("This is Child #%d/n", my_number);
exit(0);
}
Tengo problemas, necesito hacer un programa que realice 9 procesos secundarios, después de eso tengo que poner una cuenta regresiva de 3 segundos y hacer estos 9 procesos para esperar una señal del padre, después de que reciban esta señal, cada los niños deben decir qué niños es (si él es los niños # 1, # 2, # 3, etc., en el orden en que fueron hechos).
Lo que he hecho está aquí, todo está bien, creo, hasta la parte en la que tengo que decir de niños, cuál es mi número, no tengo ni idea de cómo hacerlo, porque cada niño es diferente proceso, no comparten memoria y la señal no puede usar argumentos para eso, ahora estoy imprimiendo el PID en la función llamada "controlador", pero ¿cómo puedo imprimir mi número, como un niño ?.
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <sys/types.h>
void handler(int x);
int main() {
pid_t child[9];
pid_t child_pid;
for (int i = 0; i < 9; ++i) {
child_pid = fork();
child[i] = child_pid;
if (child_pid == 0)
break;
if (child_pid < 0) {
perror("fork()");
exit(EXIT_FAILURE);
}
}
if (child_pid == 0) {
signal(SIGUSR1, handler);
pause();
} else {
printf("Countdown:/n");
sleep(1);
printf("3/n");
sleep(1);
printf("2/n");
sleep(1);
printf("1/n");
sleep(1);
for (int i = 0; i < 9; i++)
kill(child[i], SIGUSR1);
waitpid(-1, NULL, 0);
}
return 0;
}
void handler(int sig) {
printf("This is Child #%d/n", getpid());
exit(0);
}