题目:
验证:信号会相互嵌套,但不会嵌套相同的信号
代码验证:
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <signal.h>
void f1(int sig)
{
for(int i=10;i>=0;i--)
{
fprintf(stderr,"%d ",i+10);
sleep(1);
}
}
void f2(int sig)
{
for(int i=10;i>=0;i--)
{
fprintf(stderr,"%d ",i+20);
sleep(1);
}
}
void f3(int sig)
{
for(int i=10;i>=0;i--)
{
fprintf(stderr,"%d ",i+30);
sleep(1);
}
}
int main()
{
signal(SIGINT,f1);
signal(SIGQUIT,f2);
signal(SIGTSTP,f3);
pause();
pause();
pause();
}
代码分析:
该程序,当运行一个信号的时候,传入第二个信号:
如果传入的是相同信号,当前面一个信号执行完后,再继续执行第二个相同信号
如果是不同的信号,立即执行第二个信号,第二信号完后返回继续执行第一个信号
输出效果如图:
上面一行是先输入的2号信号Ctrl+C 然后输入的是3号信号Ctrl+\
下面一行是输入的两个相同的信号。
注意看其中每行第二个信号的输入前后的数字变化。
多啰嗦一句fprintf里面的stderr简单点讲就是输出的屏幕,区别于stdout它是输出到磁盘
菜鸟原创,编辑不易,不喜勿喷。点个赞吧!!!