LINUX.ORG.RU

[c++]Завершение процесса

 


0

1

Процесс создаёт дочерний процесс. Дочерний процесс должен игнорировать все сигналы кроме пользовательского(посылаемого родителем) по которому он должен закончится(использовать ф-ию sigprocmask) ВОПРОС КАК ЗАвершить процесс- мой решение не совсем соответсвует условию.

void main()

{ pid_t pid;

sigset_t x;

static struct sigaction act;

act.sa_handler=par_act;

sigfillset(&x);

sigdellset(SIGUSR1,&x);

sigprocmasc(SIG_BLOCK,&x,NULL);

switch(pid=fork())

case 1:perror(«ERROR»);

case 0:sigaction(SIGUSR1,&act,NULL);

default: sleep(5);

kill(pid,SIGUSR1);

printf(«Polzovatelskii signal otpravlen

do4ernemu,razblokirovka vseh signalov»);}

void par_act(int sig)

{ printf(«Do4ernii process razblokiruet vse signali»); sigprocmask(SIG_UNBLOCK,&x,NULL);

wait(); }



Последнее исправление: liberty (всего исправлений: 2)

прочитай уже наконец фак про ЛОР соде.)))

anonymous
()
Ответ на: комментарий от Diecae8i

ну блин спасибо конечно ) ДОчерний процесс/

как ещё кроме wait

liberty
() автор топика
Ответ на: комментарий от Diecae8i

я на скорую руку напечатал не компилировал, с листочка сразу .

liberty
() автор топика

У меня получилось так:

#include <signal.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>

static sigset_t old;

static void par_act(int sig)
{
    printf("Do4ernii process razblokiruet vse signali\n");
    sigprocmask(SIG_BLOCK, &old, NULL);
    exit(0);
}

int main(void)
{
    pid_t pid;
    static sigset_t x;
    struct sigaction act;
    act.sa_handler = par_act;
    sigfillset(&x);
    sigdelset(&x, SIGUSR1);

    switch(pid = fork()) {
    case 1:
        perror("ERROR");
        break;
    case 0:
        sigprocmask(SIG_BLOCK, &x, &old);
        sigaction(SIGUSR1, &act, NULL);
        pause();
        break;
    default:
        sleep(5);
        kill(pid, SIGUSR1);
        printf("Polzovatelskii signal otpravlen do4ernemu,razblokirovka vseh signalov\n");
        break;
    }
    return 0;
}

Diecae8i
()

А где здесь собственно C++.

KblCb ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.