He estado tratando de averiguar si esto es posible de la manera en que lo he hecho o no. Este programa debe bifurcar un proceso secundario que enruta la impresión a STDOUT, y el padre debe salir para devolver la solicitud de la terminal. El niño debería esperar que SIGINT le diga cuándo cerrar. Sin embargo, recuerdo haber leído que SIGINT solo se envía a procesos en primer plano, lo que explica por qué mi hijo abandonado no se ve afectado por CTRL + C. ¿Hay alguna forma de conseguir que el niño abandonado reciba una señal enviada desde la terminal, o alguna llamada al sistema en la terminal para llevarlo al primer plano donde pueda recibir SIGINT? ¿O mi búsqueda es desesperada?Problema al enviar la señal al proceso secundario en C
Código:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/wait.h>
#include <sys/types.h>
/* signal handler for the child process */
void catchInt (int signum)
{
printf("\nMy sincerest apologies, master\n");
exit(0);
}
/* signal handler for the parent process */
void ignoreInt (int signum)
{
/* prevent any extra output from being printed */
fflush(stdout);
/* wait for child to apologize before replying */
wait(NULL);
printf("You're welcome\n");
exit(0);
}
/* signal handler for the child's alarm */
void catchAlarm (int signum)
{
printf("It's great to be alive\n");
/* reset the alarm */
signal(SIGALRM, catchAlarm);
alarm(3);
}
int main() {
pid_t pid;
/* fork process */
pid = fork();
if (pid < 0) /* error handler */
{
fprintf(stderr, "Fork Failed");
exit(-1);
}
/* child */
else if (pid == 0)
{
printf("It's great to be alive\n");
/* catch SIGINT and handle as the child should */
signal(SIGINT, catchInt);
/* catch SIGALRM being sent by alarm() */
signal(SIGALRM, catchAlarm);
/* set alarm for 3 seconds */
alarm(3);
for (;;)
{
printf("I have 42001 children and not one comes to visit\n");
usleep(500000);
}
}
/* parent */
else
{
/* exit to abandon child process in the background */
exit(0);
}
return(0);
}
¡Esto realmente funciona a la perfección! Tendré que buscar más grupos de procesos. ¡Gracias! – JKomusin
@JKomusin: aunque no es realmente una solución perfectamente robusta, consulte la actualización. – caf