信号分类
信号分为可靠信号和不可靠信号
不可靠信号的缺点 ①:处理完信号,需要重新再注册信号;②信号可能丢失。
Linux已经对缺点①做了优化,现在的不可靠问题主要指的是信号可能丢失
信号还可以分为实时信号和非实时信号--一般不可靠信号指的是前32种信号,这32种信号已经有了预定义值,每个信号有了确定的用途及含义,并且每种信号都有各自的缺省动作
--可靠信号指的后32种信号
--非实时信号都不支持排队,都是不可靠信号;实时信号都支持排队,都是可靠信号。
信号处理
进程对信号的三种响应
.忽略信号
--不采取任何操作,有两个信号不能被忽略:SIGKILL(9号信号)和SIGSTOP。
--如果进程可以忽略这两个信号,系统管理无法杀死,暂停进程,无法对系统进行管理。
--SIGKILL(9号信号)和SIGSTOP信号是不能被捕获的
.捕获并处理信号
--内核终端正在执行的代码,转去执行先前注册过的处理程序
.执行默认操作
--默认操作通常是终止进程,这取决于被发送的信号
信号发送
发送信号的函数有kill和raise
区别:kill既可以向自身发送信号,也可以向其他进程发送信号
raise函数向进程自身发送信号
int kill(oid_t pid,int sig)
参数组合解释
pid> 将信号sig发给pid进程
pid= 将信号sig发给组进程
pid=- 将信号sig发送给所有进程,调用者进程有权限发送的每一个进程(除了1号进程之外,还有它自身)
pid<- 将信号sig发送给进程组pid(绝对值)的每一个进程
//kill 函数
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h> void catch_signal(int sign)
{
switch(sign)
{
case SIGINT:
printf("accept signal!\n");
break;
default:
break;
}
} int main(int arg,char *args[])
{
//注册信号
if(signal(SIGINT,catch_signal)==SIG_ERR)
{
perror("signal error");
return-;
}
//注意:如果在fork之前安装信号,子进程会继承信号
pid_t pid=;
pid=fork();
if(pid==-)
{
printf("fork() failed ! error message:%s\n",strerror(errno));
return -;
}
if(pid==)
{
printf("child runing!\n");
//kill(getppid(),SIGINT);//向父进程发送信号
kill(,SIGINT);//向进程组内所有进程发送信号(父子进程在同一个进程组中)
//getpgrp()获取进程组的pid,此处进程组ID就是父进程的pid
/*killpg向一个进程组所有进程发送信号,第一个参数是进程组组长ID*/
killpg(getpgrp(),SIGINT);
exit();
}
printf("parent is runing!\n"); //等待子进程
int status=,ret=;
while()
{
ret=wait(&status);
if(ret==-)
{
if(errno==EINTR)
{
continue;
}
break;
}
}
printf("game over!\n");
return ;
}

Linux 信号详解二(信号分类,信号处理,kill)的更多相关文章

  1. Linux 信号详解六(可靠信号与不可靠信号)

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h&g ...

  2. Linux 信号详解四(pause,alarm)

    pause函数 --将进程置为可中断睡眠状态,然后它调用内核函数schedule(),使linux进程调度器找到另一个进程来运行. --pause使调用者进程挂起,知道一个信号被捕获. alarm函数 ...

  3. Linux 信号详解五(信号阻塞,信号未决)

    信号在内核中的表示 执行信号的处理动作成为信号递达(Delivery),信号从产生到递达之间的状态称为信号未决(Pending).进程可以选择阻塞(Block)某个信号. 被阻塞的信号产生时将保持在未 ...

  4. Linux 信号详解三(sleep,raise)

    sleep()函数 .sleep()函数作用:让进程睡眠 .能被信号打断,然后处理信号函数以后,就不再睡眠,直接向下执行代码 .sleep函数的返回值是剩余秒数 //sleep 函数 #include ...

  5. Linux 信号详解一(signal函数)

    信号列表 SIGABRT 进程停止运行 SIGALRM 警告钟 SIGFPE 算述运算例外 SIGHUP 系统挂断 SIGILL 非法指令 SIGINT 终端中断 SIGKILL 停止进程(此信号不能 ...

  6. Linux dts 设备树详解(二) 动手编写设备树dts

    Linux dts 设备树详解(一) 基础知识 Linux dts 设备树详解(二) 动手编写设备树dts 文章目录 前言 硬件结构 设备树dts文件 前言 在简单了解概念之后,我们可以开始尝试写一个 ...

  7. Linux 系统结构详解

    Linux 系统结构详解 Linux系统一般有4个主要部分: 内核.shell.文件系统和应用程序.内核.shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序.管理文件并使用系统 ...

  8. (转)Linux PS 详解

    原文:https://cn.aliyun.com/jiaocheng/162702.html 摘要:原文地址:http://www.cnblogs.com/wangkangluo1/archive/2 ...

  9. SIGPIPE信号详解

    转自:http://blog.csdn.net/lmh12506/article/details/8457772 前一段面试的时候被问到项目中有没有处理SIGPIPE信号,怎么处理的?当时没有答出来, ...

随机推荐

  1. 在Window 下安装Redis数据库

    小Alan国庆后就要回深圳找工作了,最近在复习工作所需的相关的技术,今天刚好复习到redis,redis是一个非关系型(NoSql)数据库,采用key-value的方式存储数据,她可以保存字符串(St ...

  2. 网站错误记录:A transport-level error has occurred when sending the request to the server.

    今天查看公司项目的日志文件,发现有这个错误:A transport-level error has occurred when sending the request to the server. 感 ...

  3. android Gui系统之SurfaceFlinger(5)---Vsync(2)

    9.Vsync第二部分 在上一篇中我们讲到,视图的刷新需要很多步骤, void SurfaceFlinger::handleMessageRefresh() { ATRACE_CALL(); preC ...

  4. MVC中使用SignaIR入门教程

    一.前言:每次写总要说一点最近的感想 进入工作快半年了,昨天是最郁闷的一天,我怀疑我是不是得了"星期一综合征",每个星期一很没有状态.全身都有点酸痛,这个可能一个星期只有周末才打一 ...

  5. 关于JS变量提升的一些坑

    function log(str) { // 本篇文章所有的打印都将调用此方法 console.log(str); } 函数声明和变量声明总是会被解释器悄悄地被“提升”到方法体的最顶部 变量声明.命名 ...

  6. Sql Server之旅——终点站 nolock引发的三级事件的一些思考

    曾今有件事情让我记忆犹新,那年刚来携程不久,马上就被安排写一个接口,供企鹅公司调用他们员工的差旅信息,然后我就三下五除二的给写好 了,上线之后,大概过了一个月...DBA那边报告数据库出现大量锁超时, ...

  7. 【转】总结:2015这一年App Store审核指南都有哪些变化

    本文针对此前版本的<App Store审核指南>进行了更新,并标注了2015年苹果对<App Store审核指南>进行的一些调整. App Store Review Guide ...

  8. 烂泥:puppet添加带密码的用户

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 前一篇文章,我们介绍了有关puppet3.7的安装与配置,这篇文章我们再来介绍下如何利用puppet添加带密码的用户. 要通过puppet添加带密码的用 ...

  9. WIN 下的超动态菜单(二)用法

    WIN 下的超动态菜单(一)简介 WIN 下的超动态菜单(二)用法 WIN 下的超动态菜单(三)代码 作者:黄山松,发表于博客园:http://www.cnblogs.com/tomview/     ...

  10. unp TCP 客户端服务器回射程序中对SIGCHLD信号的处理

    第五章中,有一个例子模拟客户端并发的终止TCP连接,服务器捕捉并处理SIGCHLD信号并调用waitpid函数防止僵死进程的出现.信号处理函数中核心的一句是: , &statloc, WNOH ...