zoukankan      html  css  js  c++  java
  • 信号初步

    信号是进程间通信方式的一种手段,采用异步通信机制,如果一个进程接收到一个信号,os会中断正在进行的程序流程,任何非原子操作都会被打断,如果进程定义了信号处理函数,那么会执行处理函数,否则执行默认的函数

    kill命令:

     1 1) SIGHUP         2) SIGINT         3) SIGQUIT        4) SIGILL         5) SIGTRAP
     2 6) SIGABRT        7) SIGBUS         8) SIGFPE         9) SIGKILL       10) SIGUSR1
     3 11) SIGSEGV      12) SIGUSR2       13) SIGPIPE       14) SIGALRM       15) SIGTERM
     4 16) SIGSTKFLT    17) SIGCHLD       18) SIGCONT       19) SIGSTOP       20) SIGTSTP
     5 21) SIGTTIN      22) SIGTTOU       23) SIGURG        24) SIGXCPU       25) SIGXFSZ
     6 26) SIGVTALRM    27) SIGPROF       28) SIGWINCH      29) SIGIO         30) SIGPWR
     7 31) SIGSYS       34) SIGRTMIN      35) SIGRTMIN+1    36) SIGRTMIN+2    37) SIGRTMIN+3
     8 38) SIGRTMIN+4   39) SIGRTMIN+5    40) SIGRTMIN+6    41) SIGRTMIN+7    42) SIGRTMIN+8
     9 43) SIGRTMIN+9   44) SIGRTMIN+10   45) SIGRTMIN+11   46) SIGRTMIN+12   47) SIGRTMIN+13
    10 48) SIGRTMIN+14  49) SIGRTMIN+15   50) SIGRTMAX-14   51) SIGRTMAX-13   52) SIGRTMAX-12
    11 53) SIGRTMAX-11  54) SIGRTMAX-10   55) SIGRTMAX-9    56) SIGRTMAX-8    57) SIGRTMAX-7
    12 58) SIGRTMAX-6   59) SIGRTMAX-5    60) SIGRTMAX-4    61) SIGRTMAX-3    62) SIGRTMAX-2
    13 63) SIGRTMAX-1   64) SIGRTMAX

    后32个为实时信号,前32个标准信号,后32个多用于驱动开发

    man 7 signal可以查看man中的详细信息

    上面的第一列是宏定义:

    第二列是对应编号,

    第三写是默认的处理动作

    第四列是注释

    信号有重要的一个概念的三大行为和五大动作,上面就出现了5大动作:

    term终止当前的进行

    core核心已转储,默认结束当前进程并调用dump core使用gdb进行调式

    cont:继续执行停止的进程

    stop停止当前的进程

    ign忽略当前的信号

    如何向进程发送信号呢:

    1:ctrl+c   sigint

      ctrl+z   sigstop

      ctrl+  sigquit

    2:kill命令

    3:kill函数

      int kill(int pid,int sig)

     pid的编号类型决定kill的对象,类似于waitpid

      sig表示信号类型

    pid>0  指定id的进程

    pid=0 与发送进程同组的进程

    pid=-1 组id为pid得所有进程

    pid<-1  发送给发送进程有权向该系统所有有权限发送信号的所有进程

    4:某种软件条件到了:alarm定时器到了

    unsigned int alarm(unsigned int seconds)

     1 /* kill函数的使用 */
     2 #include <stdio.h>
     3 #include <stdlib.h>
     4 #include <unistd.h>
     5 #include <signal.h>
     6 #include <sys/types.h>
     7 
     8 int main(int argc, char *argv[])
     9 {
    10     if(argc < 3)
    11     {
    12         printf("./app signal pid
    ");
    13         exit(-1);
    14     }
    15 
    16     if(kill((pid_t)atoi(argv[2]),atoi(argv[1])) < 0)
    17     {
    18         perror("kill");
    19         exit(1);
    20     }
    21 
    22     return 0;
    23 }
    24 
    25 
    26 
    27 /* alarm的使用 */
    28 #include <unistd.h>
    29 #include <stdio.h>
    30 int main(void)
    31 {
    32     int counter;
    33     alarm(1);
    34     for(counter=0; 1; counter++)
    35         printf("counter=%d ", counter);
    36     return 0;
    37 }
  • 相关阅读:
    js 去除金额的千位分隔符
    vue中的iviewUI导出1W条列表数据每次只导出2000条的逻辑
    js取整数、取余数的方法
    http协议
    vue 项目安装sass的依赖包
    浅析vue的双向数据绑定
    闭包
    Top 20 NuGet packages for captcha
    IIS URL Rewrite Module的防盗链规则设置
    IIS URL Rewrite – Installation and Use
  • 原文地址:https://www.cnblogs.com/13224ACMer/p/6407839.html
Copyright © 2011-2022 走看看