zoukankan      html  css  js  c++  java
  • 如何产生信号

    1、通过终端按键产生信号

         在前台进程输入ctrl+c或者ctrl+/可以产生硬件中断。

    2、调用系统函数向进程发信号

    在shell命令下发送信号具体格式如下

    $ ./a.out &
    [1] 7940
    $ kill -SIGSEGV 7940
    $(再次回车)
    [1]+  Segmentation fault      (core dumped) ./a.out

    7940是a.out进程的id。之所以要再次回车才显示Segmentation fault,是因为在7940进程终止掉之前已经回到了Shell提示符等待用户输入下一条命令,Shell不希望Segmentation fault信息和用户的输入交错在一起,所以等用户输入命令之后才显示。指定某种信号的kill命令可以有多种写法,上面的命令还可以写成kill -SEGV 7940kill -11 7940,11是信号SIGSEGV的编号。以往遇到的段错误都是由非法内存访问产生的,而这个程序本身没错,给它发SIGSEGV也能产生段错误。

    3、软件本身产生中断

    比如由alarm函数产生的SIGALRM信号。

    #include <unistd.h>
    #include <stdio.h>
    
    int main(void)
    {
        int counter;
        alarm(1);
        for(counter=0; 1; counter++)
            printf("counter=%d ", counter);
        return 0;
    }
  • 相关阅读:
    C# 中数组、ArrayList、List<T> 区别
    启动SourceNavigator出错(问题解决)
    (转)SlickEdit软件使用
    ubuntu操作记录
    ubuntu下安装Source Insight
    Android中对于没有Looper的类,要使用Toast的问题
    (转)ubuntu下安装source navigator
    (转)深入理解之 Android Handler(相当好!!!)
    Git常用命令及思维导图
    (转)android的消息处理机制(图+源码分析)——Looper,Handler,Message
  • 原文地址:https://www.cnblogs.com/pang1567/p/3649863.html
Copyright © 2011-2022 走看看