Я выясняя, как сигналы работают в С. Вот один из примеров, взятых из старых экзаменов:Обработка сигналов в 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 имен: Вилок, бегите в ребенке, печать Ghost
, выход (0) => в Parent, принимать/сигнал процесса и от обработчика сигналу печати Phantom
, убить ребенок, печать Ninja
. Но я не уверен, поддерживает ли моя «теория».
Также будет kill(pid1, SIGUSR1)
invoke handler()
?
Спасибо!
Не ответ на вопрос как таковой, но вы должны ** никогда ** не вызывать printf() в обработчике сигналов. – JeremyP 2010-12-16 11:05:23