在Linux下打开两个shell命令行环境,这里分别称之为shell_env_1和shell_env_2。
在shell_env_1和shell_env_2中各执行一下命令tty,得到两个shell环境各自对应的终端设备文件的完整路径,这里分别用tty_dev_1和tty_dev2表示。
在如下程序中增加针对信号SIGINT的处理代码,然后在shell_env_1中编译运行此程序。
使得此程序在运行后,用户需要在shell_env_1中连按5次CTRL+C才能使之退出。
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <signal.h>
#include <ucontext.h>
int main(int argc, char *argv[])
{
while (1)
{
printf(".");
fflush(stdout);
sleep(1);
}
return 0;
}
修改后 在终端中按5次ctl+c 才会退出程序:
#include <stdio.h> #include <unistd.h> #include <string.h> #include <stdlib.h> #include <errno.h> #include <signal.h> #include <ucontext.h> #define SIGINTCOUNT (int)3 int main(int argc, char *argv[]) { int i=0; void SignCapture(int iSignNo) { if (i<SIGINTCOUNT) { i++; } else { signal(SIGINT,SIG_DFL); } } signal(SIGINT,SignCapture); /*捕获ctrl+c信号后进入SignCapture()函数进行处理*/ while (1) { printf("."); fflush(stdout); sleep(1); } return 0; }