сигналы+fork

Все о программировании под *nix
Ларин
Неотъемлемая часть форума
Сообщения: 484
Зарегистрирован: 19 ноя 2007, 15:01
Контактная информация:

сигналы+fork

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

Задача. Нужно создать дерево процессов( как на рисунке http://picasaweb.google.com/larinus/Jnm ... 7251895954), а потом, что бы каждый процесс послал сигнал SIGUSR2 отцу и после принятия сигнала от последнего потомка, отец сделал какое-нибудь действие.
вот, что я сделал, но когда сигнал посылает первый потомок, отец завершает работу.
как мне сделать так, что бы отец получил все сигналы, а потом, например, вывел на экран результат

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

#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());
                            }
                    }
            }
        }

    }

}

Аватара пользователя
exe
Неотъемлемая часть форума
Сообщения: 860
Зарегистрирован: 28 ноя 2003, 21:08
Откуда: Минск

Сообщение exe »

Люди, ну чего вы заводитесь с пол-обор[м]ота.
Лишнее удалено.

Вопрос ещё актуален?

Ларин
Неотъемлемая часть форума
Сообщения: 484
Зарегистрирован: 19 ноя 2007, 15:01
Контактная информация:

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

exe писал(а):Люди, ну чего вы заводитесь с пол-обор[м]ота.
Лишнее удалено.

Вопрос ещё актуален?
нет.
Two of the most famous products of Berkeley are LSD and BSD:)

Закрыто