我正在了解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个名称组成的任何其他组合吗?我认为可能产生三个名称的一种方法是:分叉,运行在子进程中,打印
Ghost
,退出(0) => 在父进程中,接受/处理信号,并从信号处理程序中打印Phantom
,杀死子进程,打印Ninja
。但我不确定我的“理论”是否站得住脚。另外,
kill(pid1, SIGUSR1)
会调用handler()
吗?谢谢!