Я разветвляю процесс и назначаю дочерний процесс al oop, где каждую секунду мы увеличиваем таймер и отправляем сообщение на stderr
. Когда таймер достигает 10, родитель должен сказать ребенку остановиться, отправив ему сигнал SIGUSR1
. Это единственный способ сделать это. Моя проблема в том, что я не могу понять, как это сделать. Вот что я попробовал:
#define _XOPEN_SOURCE 700
#include <stdlib.h>
#include <stdio.h>
#include <sys/wait.h>
#include <signal.h>
#include <unistd.h>
volatile sig_atomic_t timer;
int task_execute(void (*function)());
void traite();
void sighandler(int sig)
{
if (sig == SIGUSR1)
{
printf("Received SIGUSR1!\n");
exit(127);
}
}
int main()
{
task_execute(&traite);
return EXIT_FAILURE;
}
void traite()
{
fprintf(stdout, "Message\n");
timer++;
}
int task_execute(void (*function)())
{
int result;
pid_t p = fork();
switch (p)
{
case -1:
perror("fork");
fprintf(stderr, "INIT %d\n", p);
fprintf(stderr, "DEAD %d\n", p);
break;
case 0:
signal(SIGUSR1, sighandler);
while (1)
{
function();
sleep(1);
};
exit(127);
break;
default:
fprintf(stderr, "INIT %d\n", p);
while (1)
{
if (timer == 10)
{
break;
}
}
pid_t pid = wait(&result);
if (WIFEXITED(result) && WEXITSTATUS(result) == EXIT_SUCCESS)
{
fprintf(stderr, "FINI %d\n", pid);
kill(pid, SIGUSR1);
break;
}
}
}
Как я могу сказать, чтобы дочерний процесс остановился?