pause函数
pause函数挂起调用它的进程,直到有任何消息到达。
调用进程必须有能力处理送达的信号,否则信号的默认部署就会发生。
int pause(void);
只有进程捕获到一个信号的时候pause才返回,如果递送到的信号引发了对信号的处理,那么处理工作将在pause返回前执行。
pause总是返回-,并且将变量errno设置为EINTR。
发送信号和捕获信号是相辅相成的。
每个进程能够决定响应除了SIGSTOP和SIGKILL之外的其他所有信号。
SIGSTOP和SIGKILL不能被捕获或者忽略。
捕获信号不是真的去捕获它,而是等待信号被发送过来。
当执行一个程序的时候,所有信号的状态都是系统默认或者忽略。
当一个进程调用fork的时候,其子进程继承父进程的信号处理方式,所以信号捕捉函数的地址在子进程中是有意义的,
定义信号处理器
某些情况下,一个信号的默认动作就是所希望的行为。但更多场合下,你可以改变默认行为或者执行额外的代码。
如果想改变默认行为就必须定义并安装一个自动的信号处理器。
指向函数的指针
--可以用指针变量指向整型变量、字符串、数组、结构体、也可以指向一个函数。
--一个函数在编译时被分配一个入口地址,这个入口地址被称为函数指针。
--可以用一个指针变量指向函数,然后通过该指针变量调用此函数。
回调函数
--回调函数就是一个通过函数指针调用的函数。
--如果把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。
--回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外一方调用,用于对该事件或条件进行响应。
--windows编程下的窗口过程就是典型的回调函数。
signal函数
--UNIX/Linux处理信号最常用的接口是signal函数
.在命令行使用kill命令,向指定进程发送信号。
--使用kill函数
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
signal函数一般用于捕捉信号,其功能是为一个信号注册一个回调函数。
第一个参数signum一般就是系统提供的信号,表示要捕捉这个信号。
第二个参数指定类型的函数指针(typedef void (*FUNC)(int)),该函数有个int型参数,int代表捕获到的信号值。
捕捉多个信号需要使用多个signal()函数 进程捕捉到信号并对信号进行处理时,进程正在执行的指令序列就被信号处理程序临时中断。它首先执行该信号处理程序中的指令。
如果信号处理程序返回(没有调用exit()或者abort()),则继续执行在捕获到信号时进程正在执行的正常指令序列。
在信号处理程序中,不能判断捕捉到信号是进程正在何处执行。 编译后执行该程序
用kill命令发送信号给该程序
--kill命令作用其实不是‘杀死’的意思,而是将指定信号发送给指定进程。
--kill [-s signal|-p] [--] pid...
--kill可以用-s指定具体的信号发给指定的进程。
--kill -s 2 2365 (SIGINT的值就是2,这个命令是将SIGINT信号发送给指定进程)
--信号都是整数
//捕捉信号
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <signal.h> void catch_signal(int sign)
{
switch(sign)
{
case SIGINT:
printf("SIGINT signal\n");
exit();
break;
case SIGALRM:
printf("SIGALRM signal\n");
break;
}
} int main(int arg, char *args[])
{
signal(SIGINT,catch_signal);
signal(SIGALRM,catch_signal);
int i=;
while()
{
printf("hello god %d\n",i++);
sleep();
}
return ;
}
.SUFFIXES:.c .o
CC=gcc
SRCS=hello.c
OBJS=$(SRCS:.c=.o)
EXEC=tec start:$(OBJS)
$(CC) -o $(EXEC) $(OBJS)
@echo "^_^----OK----^_^"
.c.o:
$(CC) -Wall -g -o $@ -c $<
clean:
rm -f $(OBJS)
rm -f $(EXEC)

Linux 信号捕捉的更多相关文章

  1. Linux控制脚本:信号捕捉,作业控制,调整谦让度,以及计划任务

    1.关于信号以及信号捕捉 (1) $ ps  -au可以用来查看所有作业,包括暂停的和停止的,当然还有正在运行的. 在STAT这一列表示各个作业的状态,S表示Stop,R表示Run,T表示被追踪的或停 ...

  2. Linux信号-信号集&信号屏蔽字&捕捉信号【转】

    转自:https://blog.csdn.net/Lycorisradiata__/article/details/80096203 一. 阻塞信号 1. 信号的常见其他概念    实际执行信号的处理 ...

  3. Linux系统编程—信号捕捉

    前面我们学习了信号产生的几种方式,而对于信号的处理有如下几种方式: 默认处理方式: 忽略: 捕捉. 信号的捕捉,说白了就是抓到一个信号后,执行我们指定的函数,或者执行我们指定的动作.下面详细介绍两个信 ...

  4. Linux下捕捉信号

    关于 信号signal的知识铺垫 点这里 信号由三种处理方式: 忽略 执行该信号的默认处理动作 捕捉信号 如果信号的处理动作是用户自定义函数,在信号递达时就调用这个自定义函数,这称为捕捉信号. 进程收 ...

  5. 僵尸进程学习 & 进程状态列表 & Linux信号学习

    参考这篇文章: http://www.mike.org.cn/articles/treatment-of-zombie-processes-under-linux/ 在Linux进程的状态中,僵尸进程 ...

  6. Linux信号(signal) 机制分析

    Linux信号(signal) 机制分析 [摘要]本文分析了Linux内核对于信号的实现机制和应用层的相关处理.首先介绍了软中断信号的本质及信号的两种不同分类方法尤其是不可靠信号的原理.接着分析了内核 ...

  7. [置顶] Linux信号相关笔记

    最近又温习了一遍Linux中的信号知识,发现有很多东西以前没有注意到,就通过这篇博客记录一下,巩固一下知识点. 一,信号基础: 信号是什么?为了回答这个问题,首先要从异常说起,这里的异常不是指c++/ ...

  8. 利用linux信号机制调试段错误(Segment fault)

    在实际开发过程中,大家可能会遇到段错误的问题,虽然是个老问题,但是其带来的隐患是极大的,只要出现一次,程序立即崩溃中止.如果程序运行在PC中,segment fault的调试相对比较方便,因为可以通过 ...

  9. 非常好的一篇对linux信号(signal)的解析 (转载)【转】

    转自:https://blog.csdn.net/return_cc/article/details/78845346 Linux信号(signal) 机制分析 转载至:https://www.cnb ...

随机推荐

  1. iOS阅读器实践系列(一)coretext纯文本排版基础

    前言:之前做了公司阅读类的App,最近有时间来写一下阅读部分的实现过程,供梳理逻辑,计划会写一个系列希望能涉及到尽量多的方面与细节,欢迎大家交流.吐槽.拍砖,共同进步. 阅读的排版用的是coretex ...

  2. 如何改进iOS App的离线使用体验

    App Store中的App分析 App已经与我们形影不离了,不管在地铁上.公交上还是在会场你总能看到很多人拿出来手机,刷一刷微博,看看新闻. 据不完全统计有近一半的用户在非Wifi环境打开App,以 ...

  3. iOS提醒用户进入设置界面进行重新授权通知定位等功能

    iOS 8及以上版本最不为人知的一个特点是与应用设置的深层链接,用户可以根据APP的需要授权启用位置.通知.联系人.相机.日历以及健康等设置. 大多数应用程序仅仅是弹出一个包含操作指令的警示窗口,如“ ...

  4. iOS-代理反向传值<转>

    在上篇博客 iOS代理协议 中,侧重解析了委托代理协议的概念等,本文将侧重于它们在开发中的应用. 假如我们有一个需求如下:界面A上面有一个button.一个label.从界面A跳转到界面B,在界面B的 ...

  5. JDBC demo

    package com.zhangbz.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql ...

  6. 换新 iPhone 前要做的 9 件事

    iPhone 6 以及 iPhone 6 Plus 终于在众人的期盼下发布了,是不是很多朋友都跃跃欲试,想入手新的 iPhone 呢?若你手中持有旧款 iPhone 的话,其实更换成新机后,还有不少事 ...

  7. HTTP详解2-请求、响应、缓存

    1. HTTP请求格式 做过Socket编程的人都知道,当我们设计一个通信协议时,“消息头/消息体”的分割方式是很常用的,消息头告诉对方这个消息是干什么的,消息体告诉对方怎么干.HTTP协议传输的消息 ...

  8. 动手学习TCP:数据传输

    前面的文章介绍了TCP状态变迁,以及TCP状态变迁图中的一些特殊状态. 本文主要看看TCP数据传输过程中需要了解的一些重要点: MSS(Maximum Segment Size) Seq号和Ack号的 ...

  9. NOIP2009普及组细胞分裂(数论)——yhx

    题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家.现在,他正在为一个细胞实 验做准备工作:培养细胞样本. Hanks 博士手里现在有 N 种细胞,编号从 1~N,一个 ...

  10. 匈牙利算法 codevs 2776 寻找代表元

    codevs 2776 寻找代表元  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题目描述 Description 广州二中苏元实验学校一共有n个社团,分别用 ...