Как получить сигнал от ребенка

Напишите программу, которая создает дочерний процесс с использованием fork (). Дочерний объект печатает имя своего родителя, идентификатор родителя и собственный идентификатор, в то время как родитель ожидает сигнала от дочернего процесса. Родитель устанавливает будильник через 10 секунд после завершения дочернего процесса.

Приведенный ниже код не получает сигнал тревоги от ребенка, а также не входит в обработчик тревоги, т.е. функцию дин.

что я должен делать?

using namespace std;

static int alarm_fired = 0;

void ding(int sig)
{

sleep(10);

 cout<<"Alarm\n";


}

int main()
{

int cpid,i,ppid;

int status = 0;

cpid=fork();

switch(cpid)

{

case -1:

        cout<<"error";

break;

case 0:

        cout<<"Child Block"<<endl;

        cout<<"Parent\n"<<"ParentID: "<<getppid()<<"\nChildID: "<<getpid();

        kill(getppid(), SIGALRM);

default:
        cout<<"Parent Waiting"<<endl;

        wait(&status);

        cout<<"Parent Waiting is Finished"<<endl; 

        signal(SIGALRM, ding);        
}
}

1 ответ

Вам нужно настроить родительский обработчик сигнала "сигнал (SIGALRM, ding)", прежде чем ребенок отправит SIGALARM. В вашем случае вы можете переместить "signal(SIGALRM, ding)" на одну строку выше fork().

Другие вопросы по тегам