Страница 1 из 1

сигналы+fork

Добавлено: 06 дек 2007, 10:47
Ларин
Задача. Нужно создать дерево процессов( как на рисунке 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());
                            }
                    }
            }
        }

    }

}

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

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

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

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