zoukankan      html  css  js  c++  java
  • 捕获信号

    pause函数挂起调用它的进程,直到有任何消息到达。
    调用进程必须由能力处理送达的信号,否则信号的默认部署就会发生。。

    #include <unistd.h>

    int pause(void);

    只有进程捕获到一个信号的时候pause才返回,如果递送到的信号引发了对信号的处理,那么处理工作将在pause返回前执行。
    pause总是返回-1,并且变量errno设置为EINTR。
     
     
    发送信号和捕获信号是相辅相成的。
    每个进程能够决定响应除了SIGSTOP和SIGKILL之外的其他所有信号
    SIGSTOP和SIGKILL不能被捕获或者忽略。
    捕获信号不是真的去捕获它,而是等待信号被发送过来。
     
     
    当执行一个程序的时候,所有信号的状态都是系统默认或者忽略。
    当一个进程调用fork的时候,其子进程继承父进程的信号处理方式,所以信号捕捉函数的地址在子进程中是有意义的。
     
     
     
    定义信号处理器。
    某些情况下,一个信号的默认动作就是所希望的行为。但更多场合下,你可以改变默认行为或者执行额外的代码。
    如果想改变默认行为就必须定义并安装一个自动以的信号处理器。
     
     
     
    指向函数的指针
      –可以用指针变量指向整形变量、字符串、数组、结构体、也可以指向一个函数。
      –一个函数在编译时被分配一个入口地址。这个入口地址就称为函数指针。
      –可以用一个指针变量指向函数,然后通过该指针变量调用此函数
     
     
     
    函数指针例子
    int func(int i1,int i2)
    {
        return i1 + i2;
    }
    
    int main()
    {
        int (*pfunc)(int, int) ;
        pfunc = func;
        printf("%d
    ", pfunc(3, 5));
        return 0;
    }
    回调函数
      –回调函数就是一个通过函数指针调用的函数。
      –如果把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。
      –回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
      –Windows编程下的窗口过程就是典型的回调函数。
     
     
     
    signal函数
      –UNIX/Linux处理信号最常用的接口是signal函数
    •在命令行使用kill命令,向指定进程发送信号。
      –使用kill函数

    #include <signal.h>

    void (*signal(int signo, void (*func)(int))) (int);

    参数signo是前面表格中的信号名。
    参数func是接到此信号后要调用的函数。该函数有个int型参数,int代表捕获到的信号值
     
     
     
    进程捕捉到信号并对信号进行处理时,进程正在执行的指令序列就被信号处理程序临时中断,它首先执行该信号处理程序中的指令。
    如果信号处理程序返回(没有调用exit(0)或者abort),则继续执行在捕捉到信号时进程正在执行的正常指令序列。
    在信号处理程序中,不能判断捕捉到信号时进程正在何处执行。
     
     
    signal函数例子
     
    void catch_Signal(int Sign)
    {
        switch(Sign)
        {
        case SIGINT:
            printf("SIGINT Signal
    ");
        }
    }
    int main(int arg, char *args[])
    {
        signal(SIGINT, catch_Signal);
        pause();
        return 0;
    }
    编译后执行该程序
    用kill命令发送信号给该程序
      –kill命令作用其实不是‘杀死’的意思,而是将指定信号发送给指定进程。
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    git 学习笔记
    review一下上一年的积累
    修改数据库用户的IP地址
    phpstudy 设置局域网内访问本地项目
    关于layui的时间空间 点击时间直接确定并关闭窗口
    关于tp5.1隐藏入口文件出现No input file specified.的解决办法
    关于在TP中使用webupload切片上传文件与CI框架中切片上传文件
    关于使用微信浏览网页打开键盘会把网页顶上去,是弹窗无法相应的问题解决
    VUE的安装及使用(待续)
    前端实现调动打印机部分打印界面
  • 原文地址:https://www.cnblogs.com/shichuan/p/4496334.html
Copyright © 2011-2022 走看看