Linux下signal()使用

xiaoxiao2021-02-28  92

在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; }

转载请注明原文地址: https://www.6miu.com/read-60208.html

最新回复(0)