Как получить сигнал от ребенка
Напишите программу, которая создает дочерний процесс с использованием 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().