Linux 信号详解一(signal函数)
- 信号列表
- SIGABRT 进程停止运行
- SIGALRM 警告钟
- SIGFPE 算述运算例外
- SIGHUP 系统挂断
- SIGILL 非法指令
- SIGINT 终端中断
- SIGKILL 停止进程(此信号不能被忽略或捕获)
- SIGPIPE 向没有读的管道写入数据
- SIGSEGV 无效内存段访问
- SIGQOUT 终端退出
- SIGTERM 终止
- SIGUSR1 用户定义信号1
- SIGUSR2 用户定义信号2
- SIGCHLD 子进程已经停止或退出
- SIGCONT 如果被停止则继续执行
- SIGSTOP 停止执行
- SIGTSTP 终端停止信号
- SIGTOUT 后台进程请求进行写操作
- SIGTTIN 后台进程请求进行读操作
- typedef void (*sighandler_t)(int);
- sighandler_t signal(int signum, sighandler_t handler);
- signal函数
- 作用1:站在应用程序的角度,注册一个信号处理函数
- 作用2:忽略信号,设置信号默认处理 信号的安装和回复
- 参数
- --signal是一个带signum和handler两个参数的函数,准备捕捉或屏蔽的信号由参数signum给出,接收到指定信号时将要调用的函数有handler给出
- --handler这个函数必须有一个int类型的参数(即接收到的信号代码),它本身的类型是void
- --handler也可以是下面两个特殊值:① SIG_IGN 屏蔽该信号 ② SIG_DFL 恢复默认行为
- //忽略,屏蔽信号
#include <stdio.h>- #include <stdlib.h>
- #include <string.h>
- #include <unistd.h>
- #include <errno.h>
- #include <sys/types.h>
- #include <signal.h>
- int main(int arg, char *args[])
- {
- pid_t pid=fork();
- if(pid==-)
- {
- printf("fork() failed! error message:%s\n",strerror(errno));
- return -;
- }
- //注册信号,屏蔽SIGCHLD信号,子进程退出,将不会给父进程发送信号,因此也不会出现僵尸进程
- signal(SIGCHLD,SIG_IGN);
- if(pid>)
- {
- printf("father is runing !\n");
- sleep();
- }
- if(pid==)
- {
- printf("i am child!\n");
- exit();
- }
- printf("game over!\n");
- return ;
- }
- //恢复信号
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <unistd.h>
- #include <errno.h>
- #include <sys/types.h>
- #include <signal.h>
- void catch_signal(int sign)
- {
- switch (sign)
- {
- case SIGINT:
- printf("ctrl + C 被执行了!\n");
- //exit(0);
- break;
- }
- }
- int main(int arg, char *args[])
- {
- //注册终端中断信号
- signal(SIGINT, catch_signal);
- char tempc = ;
- while ((tempc = getchar()) != 'a')
- {
- printf("tempc=%d\n", tempc);
- //sleep()
- }
- //恢复信号
- signal(SIGINT, SIG_DFL);
- while ()
- {
- pause();
- }
- printf("game over!\n");
- return ;
- }
- //signal()函数的返回值
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <unistd.h>
- #include <errno.h>
- #include <sys/types.h>
- #include <signal.h>
- void catch_signal(int sign)
- {
- switch (sign)
- {
- case SIGINT:
- printf("ctrl + C 被执行了!\n");
- //exit(0);
- break;
- }
- }
- int main(int arg, char *args[])
- {
- /*
- * signal()函数的返回值是signal()函数上一次的行为
- * */
- typedef void (*sighandler_t)(int);
- //因为第一次注册信号SIGINT,所以上一次的行为就是默认行为
- sighandler_t old=signal(SIGINT, catch_signal);
- if(old==SIG_ERR)
- {
- //注册信号失败
- perror("signal error");
- }
- /*正规写法*/
- if(signal(SIGQUIT,catch_signal)==SIG_ERR)
- {
- //注册新号失败
- perror("signal error");
- }
- char tempc = ;
- while ((tempc = getchar()) != 'a')
- {
- printf("tempc=%d\n", tempc);
- //sleep()
- }
- //把默认行为重新注册,不就是恢复默认信号了
- signal(SIGINT, old);
- while ()
- {
- pause();
- }
- printf("game over!\n");
- return ;
- }
Linux 信号详解一(signal函数)的更多相关文章
- Linux 信号详解四(pause,alarm)
pause函数 --将进程置为可中断睡眠状态,然后它调用内核函数schedule(),使linux进程调度器找到另一个进程来运行. --pause使调用者进程挂起,知道一个信号被捕获. alarm函数 ...
- Linux 信号(二)—— signal 函数
弗洛伊德认为:要解决这些苦恼,当事人就要通过回忆并理解自己早期的童年经历,来获得对潜意识冲突的顿悟.弗洛伊德的疗法被称为“精神分析” (psychoanalysis),在 20 世纪的很长一段时间被心 ...
- Linux 信号详解六(可靠信号与不可靠信号)
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h&g ...
- Linux 信号详解五(信号阻塞,信号未决)
信号在内核中的表示 执行信号的处理动作成为信号递达(Delivery),信号从产生到递达之间的状态称为信号未决(Pending).进程可以选择阻塞(Block)某个信号. 被阻塞的信号产生时将保持在未 ...
- Linux 信号详解二(信号分类,信号处理,kill)
信号分类 信号分为可靠信号和不可靠信号 不可靠信号的缺点 ①:处理完信号,需要重新再注册信号:②信号可能丢失. Linux已经对缺点①做了优化,现在的不可靠问题主要指的是信号可能丢失 信号还可以分为实 ...
- Linux 信号详解三(sleep,raise)
sleep()函数 .sleep()函数作用:让进程睡眠 .能被信号打断,然后处理信号函数以后,就不再睡眠,直接向下执行代码 .sleep函数的返回值是剩余秒数 //sleep 函数 #include ...
- SIGPIPE信号详解
转自:http://blog.csdn.net/lmh12506/article/details/8457772 前一段面试的时候被问到项目中有没有处理SIGPIPE信号,怎么处理的?当时没有答出来, ...
- Linux 系统结构详解
Linux 系统结构详解 Linux系统一般有4个主要部分: 内核.shell.文件系统和应用程序.内核.shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序.管理文件并使用系统 ...
- (转)Linux PS 详解
原文:https://cn.aliyun.com/jiaocheng/162702.html 摘要:原文地址:http://www.cnblogs.com/wangkangluo1/archive/2 ...
随机推荐
- zend studio 9.0.4 破解、汉化和字体颜色及快捷键相关设置
转载:http://www.penglig.com/post-45.html 下载:http://www.geekso.com/component/zendstudio-downloads/ 破解:h ...
- 对js中Function的浅见
它到底是什么 String Array 都是系统内置对象(已经定义好,可以直接使用)当然,这货也是一样,我们之前定义的函数,其实就是一个这货的实例. 在JS中,所有的对象都是由函数实现的,函数的数据类 ...
- 磁带机Media is unrecognized
早晨检查磁带备份作业时,发现有个驱动的作业一直处于"Queue"状态,检查发现驱动有磁带,在Alert里面发现出现下面"Media is unrecognized&quo ...
- ASP.NET Web API 简介
ASP.NET MVC 4 包含了 ASP.NET Web API, 这是一个创建可以连接包括浏览器.移动设备等多种客户端的 Http 服务的新框架, ASP.NET Web API 也是构建 RES ...
- 工作中常用的Linux命令:mkdir命令
本文链接:http://www.cnblogs.com/MartinChentf/p/6076075.html (转载请注明出处) 在Linux系统中,mkdir命令用来创建一个目录或一个级联目录. ...
- Sqlserver2008 数据库镜像会话的初始连接
sqlserver2008 数据库镜像服务配置完成后,大家会发现我们有了两个数据库服务,这两个服务可以实现自动故障转移,那么我们的程序如何实现自动连接正常的数据库呢? 这个问题很简单,使用ADO.NE ...
- 支付宝APP支付开发- IOException : DER input, Integer tag error
支付宝APP支付Java开发报错: 1 java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: I ...
- 如何在TFS中恢复系统默认查询”已指派给我”的设置(TFS 2013)
故事是这样开始的,一天开发人员求助说,在浏览器中修改了系统默认的工作项查询"已指派给我"的后,发现这个查询每次都提示超时,并且没有办法恢复到初始的设置状态,因为出现超时提示以后,查 ...
- css3中变形与动画(三)
transform可以实现矩阵变换,transition实现属性的平滑过渡,animation意思是动画,动漫,这个属性才和真正意义的一帧一帧的动画相关.本文就介绍animation属性. anima ...
- 【转载】阎焱:90后创业是扯淡 大量O2O和P2P公司濒临倒闭
真正创业成功的大部分是年龄在30岁到38岁之间,很多90后基本什么都不懂.从历史来看,在这样的人口大国,集体性行为,无论是政治的还是经济的,基本都是导致灾难性后果. 10月14日消息,赛富基金创始首席 ...