вот, что я сделал, но когда сигнал посылает первый потомок, отец завершает работу.
как мне сделать так, что бы отец получил все сигналы, а потом, например, вывел на экран результат
Код: Выделить всё
#include<stdio>
#include<unistd>
#include <fcntl>
#include<signal>
int father;
void father_handler(int i)
{
printf("Получил сигнал\n");
}
main()
{
father=getpid();
struct sigaction sa;
sa.sa_handler=father_handler;
sigaction(SIGUSR2,&sa,0);
if(fork()==0)
{
printf("Йа сын 2 %d, отца %d\n",getpid(),getppid());
kill(father,SIGUSR2); //посылаю сигнал отцу
if(fork()==0)
{
printf("Йа сын 3 %d, отца %d\n",getpid(),getppid());
}else
{
if(fork()==0)
{
printf("Йа сын 4 %d, отца %d\n",getpid(),getppid());
if(fork()==0)
{
printf("Йа сын 5 %d, отца %d\n",getpid(),getppid());
if(fork()==0)
{
printf("Йа сын 9 %d, отца %d\n",getpid(),getppid());
}
}else
if(fork()==0)
{
printf("Йа сын 6 %d, отца %d\n",getpid(),getppid());
if(fork()==0)
{
printf("Йа сын 7 %d, отца %d\n",getpid(),getppid());
}else
if(fork()==0)
{
printf("Йа сын 8 %d, отца %d\n",getpid(),getppid());
}
}
}
}
}
}