сигналы+fork

Модератор: Модераторы разделов

Ответить
Ларин
Сообщения: 140

сигналы+fork

Сообщение Ларин »

Задача. Нужно создать дерево процессов(как на рисунке), а потом, что бы каждый процесс послал сигнал SIGUSR2 отцу и после принятия сигнала от последнего потомка, отец сделал какое-нибудь действие.
вот, что я сделал, но когда сигнал посылает первый потомок, отец завершает работу.
как мне сделать так, что бы отец получил все сигналы, а потом, например, вывел на экран результат

Код: Выделить всё

#include<stdio.h>
#include<unistd.h>
#include <fcntl.h>
#include<signal.h>
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());
                            }
                    }
            }
        }

    }

}
Вложения
123.JPG
Спасибо сказали:
Аватара пользователя
Red User
Сообщения: 229
ОС: Debian

Re: сигналы+fork

Сообщение Red User »

Когда заканчивается выполнение main(), отец завершается. Стоит почитать что-нибудь про процессы и обратить внимание на функцию wait().

http://www.intuit.ru/department/se/pposix/7/pposix_7.html
А ведь когда-то не боялись мы программы любой,
И с одним лишь debug'ом выходили на бой,
И искусно написанный вирус встречали как брата
Спасибо сказали:
Ларин
Сообщения: 140

Re: сигналы+fork

Сообщение Ларин »

Red User писал(а):
06.12.2007 20:22
Когда заканчивается выполнение main(), отец завершается. Стоит почитать что-нибудь про процессы и обратить внимание на функцию wait().

http://www.intuit.ru/department/se/pposix/7/pposix_7.html

спасибо за ссылку
Спасибо сказали:
Ответить