#include<stdio.h>
#include<stdlib.h>
#include<signal.h>
#include<unistd.h>
#include<sys/types.h>
void sighup()
{
signal(SIGHUP,sighup);
printf("Received SIGHUP! Happy Now ??\n");
}
void sigbus()
{
signal(SIGBUS,sigbus);
printf("received SIGBUS! Get a life dude !\n");
}
void sigquit()
{
printf("I am done with you. Bye!!\n");
fflush(stdout);
exit(0);
}
int main()
{
int pid = fork();
if (pid < 0)
{
perror("fork");
exit(1);
}
if (pid == 0)
{
printf("child\n");
signal(SIGHUP,sighup);
signal(SIGBUS,sigbus);
signal(SIGQUIT,sigquit);
while(1)
{
;
}
}
else
{
printf("parent\n");
kill(pid, SIGHUP);
kill(pid, SIGBUS);
kill(pid, SIGQUIT);
wait();
}
}
我写了这个程序作为信号处理任务的一部分,但程序的输出有点奇怪。
程序的输出是::
parent
ideone link :: http://ideone.com/a1DCik
我不知道这是怎么输出的。似乎没有创建子进程。
请解释输出。
答案 0 :(得分:5)
您的两个进程之间没有同步。完全可以想象,子进程收到未处理的信号并在执行任何signal
调用之前死掉。
事实上,极有可能:父进程在fork()
之后立即继续执行并执行杀戮,而子进程首先需要创建和调度。与父母中的kill调用相比,这两者都需要很长时间,如果您使用的是单核机器,如果您希望之前看到父,则必须非常幸运它到达kill()
行。