码迷,mamicode.com
首页 > 系统相关 > 详细

一、进程与信号之信号的概念

时间:2016-09-06 00:59:34      阅读:275      评论:0      收藏:0      [点我收藏+]

标签:

信号:进程与进程之间通讯机制

  信号是软件中断

  信号是异步事件

  信号来源:内核产生,常用信号kill(),raise(),alarm(),settimer()等

kill -l 

查看linux所有 信号共64个 1-31 非实时信号发送信号可能回丢失,不支持信号排队
 32-64实时信号

进程处理信号

  忽略信号

    SIGKILL和SIGSTOP永远不能被忽略

    忽略硬件异常

    进程启动时SIGUSER1和SIGUSER2两个信号被忽略

  执行默认操作

    每个信号都有默认动作,大部分信号动作是终止信号

 

  捕获信号

    告诉信号内核出现信号是调用自己处理函数

    SIGKILL和SIGSTOP不能被捕获

signal函数

信号注册函数

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

参数
signo 要登记的信号值1-64
func  信号处理函数指针/忽略信号SIG_IGN/默认信号SIG_DEL

若成功返回信号处理函数指针,否则返回SIG_ERR

范列

#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
#include <stdio.h>

void set_signal(int signo)
{
    printf("pid: %d,signo: %d\n",getpid(),signo);
}

int main()
{
    //SIGTSTP就是ctrl + z
    if(signal(SIGTSTP,set_signal) == SIG_ERR)
    {
        printf("set signal error");
    }
    //ctrl+c 
    if(signal(SIGINT,set_signal) == SIG_ERR)
    {
        printf("set signal error");
    }
    int i=0;
    while(i<30)
    {
        printf("i : %d\n",i++);
        sleep(1);
    }
    return 0;
}

 

一、进程与信号之信号的概念

标签:

原文地址:http://www.cnblogs.com/peixiguang/p/5844122.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!