Обработка сигналов в C

Я пытаюсь понять, как сигналы работают в C. Вот один из примеров, взятых из старых экзаменов:

#include<signal.h>
#include<unistd.h>
#include<stdio.h>
#include<errno.h>

//#include <sys/types.h>

void handler1(int sig) {
 printf("Phantom");
 exit(0);
}
int main()
{
   pid_t pid1;
   signal(SIGUSR1, handler1); //installing signal handler
   if((pid1 = fork()) == 0) { //forking
       printf("Ghost");
       exit(0);
   }
   kill(pid1, SIGUSR1);
   printf("Ninja");
   return 0;
}

Пока что GCC дает мне два ответа Ghost Ninja и Ninja Phantom . Может ли он создать Ghost Phantom Ninja или любую другую комбинацию, состоящую из 3 имен?

Я вижу, что одним из способов, которым он мог бы дать 3 имени, является: Fork, запустить в Child, напечатать Ghost , выйти (0) => в Parent, принять / обработать сигнал и из обработчика сигнала print Phantom , убить ребенка, print Ninja . Но я не уверен, что моя «теория» устойчива.

Кроме того, kill (pid1, SIGUSR1) вызовет обработчик () ?

Спасибо!

5
задан JeremyP 16 December 2010 в 11:03
поделиться