linux signal之初学篇
前言
本博文只总结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之初学篇的更多相关文章
- linux指令大全(完整篇)(转)
http://blog.chinaunix.net/uid-9681606-id-1998590.html linux指令大全(完整篇)(转) 2009-03-17 01:21:46 分类: ...
- linux signal 处理
v/:* {behavior:url(#default#VML);} o/:* {behavior:url(#default#VML);} w/:* {behavior:url(#default#VM ...
- Linux网卡调优篇-禁用ipv6与优化socket缓冲区大小
Linux网卡调优篇-禁用ipv6与优化socket缓冲区大小 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一般在内网环境中,我们几乎是用不到IPV6,因此我们没有必要把多不 ...
- 《Linux大棚命令百篇下》网络篇的总结
本文是<Linux大棚命令百篇下>网络篇的总结 ping -c 指定数量,在windows下会自动停止,linux下会一直ping下去 -q 简短报告 -s 指定每次ping的数据包大小, ...
- <摘录>linux signal 列表
Linux 信号表 Linux支持POSIX标准信号和实时信号.下面给出Linux Signal的简表,详细细节可以查看man 7 signal. 默认动作的含义如下: 中止进程(Term) 忽略 ...
- linux signal 列表
Linux 信号表 Linux支持POSIX标准信号和实时信号.下面给出Linux Signal的简表,详细细节可以查看man 7 signal. 默认动作的含义如下: Term 终止进程 ...
- linux初学者-squid代理篇
linux初学者-squid代理篇 Squid代理服务器是一种缓存服务器,一般分为正向代理和反向代理. 1.正向代理 客户端因为网络或者其他的问题,不能访问到一台Apache服务器,如果要访问到,则 ...
- linux初学者-系统启动故障篇
linux初学者-系统启动故障篇 在系统的操作中,有时会不小心误删或者操作失误使得系统启动不起来,下文将列举几种常见的系统启动失败的情况及解决的办法. 1.删除或者覆盖mbr的446个字节 mbr的4 ...
- linux初学者-数据库管理MariaDB篇
linux初学者-数据库管理MariaDB篇 MariaDB是一种数据库管理系统,是MySQL的一个分支,但是比MySQL更加优秀,可以说是MySQL的替代品.MariaDB使用的是SQL语句.下文将 ...
随机推荐
- Java基础08 继承
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 继承(inheritance)是面向对象的重要概念.继承是除组合(composit ...
- BZOJ 1531: [POI2005]Bank notes( 背包 )
多重背包... ---------------------------------------------------------------------------- #include<bit ...
- 将某个MySQL库中的UTF8字符列都转成GBK格式
DELIMITER $$ DROP PROCEDURE IF EXISTS `dba`.`Proc_ChangeCharacter2GBK`$$ CREATE DEFINER=`root`@`%` P ...
- C++操作符的优先级
C++操作符的优先级 C++操作符的优先级 操作符及其结合性 功能 用法 L L L :: :: :: 全局作用域 类作用域 名字空间作用域 ::name class::name namespace: ...
- 二维码闪电登录流程详解,附demo(1/2)
二维码,最早发明于日本,它是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设 ...
- crm查询记录共享给了哪些人
有时候,我们须要查询一个记录.共享给了哪些人?怎么做? 第一种做法:是sql的方式 select * from PrincipalObjectAccess where objectid = '5226 ...
- [置顶] NS2中TCP拥塞控制仿真过程中盲点解析
最近利用NS2做TCP拥塞控制协议的仿真,发现很多变量的方法含义都是解释的不清楚,给核心模块修改带来很多麻烦,所以决定用最准确的语言解释成员变量.方法,术语等的含义.限于个人水平,若有错误请留言指正! ...
- perl 继承概述
<pre name="code" class="html">[root@wx03 test]# cat Horse.pm package Horse ...
- vim 操作指令2
VIM命令大全 光标控制命令 命令 光标移动 h 向左移一个字符 j 向下移一行 k 向上移一行 l 向右移一个字符 G 移到文件的最后一行 w 移到下一个字的开头 W 移到下一个字的开头,忽略标点符 ...
- nodejs、gulp调试工具node-inspector使用
俗话说欲善其功,必先利其器. 作为目前新型的Web Server开发栈倍受开发者关注的Nodejs来说,调试技术是学习开发的基石,所以对于开始学习Nodejs童鞋来说,Nodejs的调试工具使用是必不 ...