linux signal之初学篇

摘要:
前言这篇博客只总结了信号的应用,暂时没有讨论信号的内核实现。Signal是Linux为进程间通信提供的IPC机制。使用kill命令或kill函数向指定进程发送信号。杀死-0pid。没有id为0的信号。通常,此命令仅用于测试进程编号pid对应的进程是否存在;然而,使用ps-A|greppid也应该能够进行此测试。对于Linux管理员,他们经常使用ps/pstree/top和其他命令来查找和杀死系统中的异常进程。杀了。如果未指定信号,默认情况下,SIGTERM将发送到与pid对应的进程。

前言

本博文只总结signal的应用,对signal的kernel实现暂不讨论。

1. linux signal是什么?

signal是linux提供的用于进程间通信的一种IPC机制。

2. 如何发送signal来实现IPC?

使用kill命令或kill函数可以发指定的进程发送signal。

kill -0 pid,没有id为0的signal,通常这个命令仅仅是用来测试进程号为pid对应的进程是否存在;

不过使用ps -A | grep pid应该同样可以做这项测试。

kill -9 pid,强制杀掉一个进程。

对于linux管理员来讲,经常会搭配ps/pstree/top等命令来查找系统中异常的进程并将其杀死。

kill pid,如果没有指定某个signal,那默认会送SIGTERM给pid对应的进程。

3. signal被如何处理?

#include <signal.h>

signal通常有三种处理方式:

(1)显示的ignore,

signal(SIGTSTP, SIGIGN);

这样子的话你的进程就会收到这条signal,但是处理的方式是ignore;

(2)你的进程可能会对某个特定的signal感兴趣,这时就可以捕获这个signal并去处理它,

struct sigaction t_act, t_oldact;
t_act.sa_flags = SA_NODEFER;
t_act.sa_sigaction = _my_signal_hander;
sigaction(SIGUSR1, &t_act, &t_oldact);
static void _my_signal_handler()
{
    /* do your thing */
}

(3)按照默认的方式处理,这样kernel会按照已经预设好的流程来处理这个signal。

4. 如何确定每一条signal对应的num,比如SIGUSR1对应的num值是多少?

请看signal.h这个header file

#define SIGHUP 1

#define SIGUSR1 10

在shell下面kill -10 pid与kill SIGUSR1 pid作用是一样的。

5. signal的应用?

待补充。

免责声明:文章转载自《linux signal之初学篇》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ArcGIS Engine栅格数据使用总结SQL 存储过程入门(事务)(四)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

qt quick中qml编程语言

Qt QML 入门 — 使用C++定义QML类型 发表于2013 年 3 月 11 日 注册C++类 注册可实例化的类型 注册不实例化的QML类型 附带属性 注册C++类 注册可实例化的类型 如果一个C++类继承自QObject,如果需要在QML中使用创建对象,则需要注册为可实例化的QML类型。 使用qmlRegisterType()注册可...

Linux 多线程应用中如何编写安全的信号处理函数

http://blog.163.com/he_junwei/blog/static/1979376462014021105242552/ http://www.ibm.com/developerworks/cn/linux/l-cn-signalsec/ Linux 多线程应用中编写安全的信号处理函数 在开发多线程应用时,开发人员一般都会考虑线程安全,会...

libevent源码学习(8):event_signal_map解析

目录event_signal_map结构体向event_signal_map中添加event激活event_signal_map中的event删除event_signal_map中的event以下源码均基于libevent-2.0.21-stable。       在前文中分析了event_io_map,在windows环境下event_io_map定义为...

Linux基础(08)信号通信机制

1.Linux中的信号(有32个)   信号会中断一些函数的阻塞 https://zhidao.baidu.com/question/1766690354480323100.html #define SIGHUP 1 #define SIGINT 2 #define SIGQUIT 3 #define SI...

signal,blinker:信号(看我脸色行事)

signal 什么是信号(signal)? 信号在linux中被用来进行进程间的通信和异步处理,简单地可以理解会为回调函数,当发送一个信号时,会触发相应的操作。python中的signal模块便是用来处理信号的,需要注意的是,这个模块不能在Windows上使用,因为Windows内核对信号的支持不是很好,这里我们使用Linux进行操作。 python的s...

Linux 信号signal处理机制

信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念、Linux对信号机制的大致实现方法、如何使用信号,以及有关信号的几个系统调用。 信号机制是进程之间相互传递消息的一种方法,信号全称为软中断信号,也有人称作软中断。从它的命名可以看出,它的实质和使用很象中断。所以,信号可以说是进程控制的一部分。 一、信号的基本概念 本节先介绍信号的一...