Я пытаюсь понять, как сигналы работают в 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)
вызовет обработчик ()
?
Спасибо!