linux c++(信号介绍)

9,19号信号不能捕捉,不能忽略,甚至不能阻塞

阻塞信号集[要屏蔽的信号]影响未决信号集[没有处理的信号集合]

信号四要素

  • 编号
  • 名称
  • 事件
  • 默认处理动作
    • 终止
    • 忽略
    • 终止+产生core
    • 暂停,继续

信号的特点

  • 简单
  • 不能携带大量信息
  • 特定条件下产生

信号的处理方式

  • 执行默认动作
  • 忽略
  • 捕捉

终端按键产生信号

  • Ctrl+c ->2)SIGINT(终止/中断) "INT" ----Interrrupt
  • Ctrl+z ->20)SIGTSTP(暂停/停止) "T" ----Terminal 终端
  • Ctrl+\ ->3)SIGQUIT(退出)

硬件异常产生信号

  • 除 0 操作 ->8)SIGFPE(浮点数例外) "F"-----float浮点数
  • 非法访问内存 ->11)SIGSEGV(段错误)
  • 总线错误 ->7)SIGBUS
int kill(pid_t pid,int sig);
pid 大于0,要发送进程ID
pid 等于0,代表当前调用进程组内所有进程
pid 等于-1,代表有权限发送的所有进程
pid 小于0,代表-pid对应的组内所有进程
sig 对应的信号
raise给自己发送信号
int raise(int sig);
abort给自己发送信号 SIGABRT
void abort(void);
	  int main()
  {
      int i = 0;
      pid_t pid3,pid;
      for (i = 0; i < 5; ++i) {
          pid = fork();
          if(pid == 0)
              break;
          if(i == 2)
            pid3 == pid;
      }

      if (i < 5) {
          while(1)
          {
              printf("I am child,pid=%d,ppid=%d\n",getpid(),getppid());
              sleep(1);
          }
      }else if(i == 5)
      {
          printf("I am parent,pid = %d,I will kill xiao san pid=%d\n",getpid(),pid3);
          sleep(5);
          kill(pid3,SIGKILL);
          while (1) {
              sleep(1);
          }
      }
      return 0;
  }

posted on 2021-05-05 21:01  lodger47  阅读(196)  评论(0)    收藏  举报

导航