信号通信
用户按某些键时,产生信号
硬件异常产生信号
进程用kill函数将信号发送给另一个进程
可以用kill函数将信号发送给其他进程
信号的类型
1 sighup 从终端上发出的结束信号
2 sigint 来自键盘的中断信号(ctrl-c)
3 sigquit
4 sigill
5 sigtrap
6 sigiot
7 sigbus
8 sigfpe
9 sigkill 结束接收信号的进程
10 sigusr1
11 sigsegv
12 sigusr2
13 sigpipe
14 sigalrm
15 sigterm kill命令发出的信号
17 sigchld 标识子进程停止或结束的信号
18 sigcont
19 sigstop 来自键盘(crtl-z)或调试程序的停止执行信号
20 sigtstp
21 sigttin
22 sigttou
23 sigurg
24 sigxcpu
25 sigxfsz
26 sigvtalrm
27 sigprof
28 sigwinch
29 sigio
30 sigpwr
信号处理
当信号出现时,将按照下列三种方式中的一种进行处理:
1 忽略此信号
sigkill和sigstop这两种信号除外
2 执行用户希望的动作
3 执行系统默认动作
信号的发送
发送信号的主要函数有:
kill: 可以向自身发送信号,也可以向其他进程发送信号
raise:向进程自身发送信号
函数原型:
#include <sys/types.h>
#include <signal.h>
int kill(pid_t pid,int signo)
int raise(int signo)
alarm
使用alarm函数可以设置一个时间值,当设置时间到时,会产生一个sigalrm信号
如果不捕捉此信号,默认动作是终止该进程
注:每个进程只能有一个闹钟时间,当seconds值是0,表示取消以前的闹钟
函数原型:
#include <unistd.h>
unsigned int alarm(unsigned int seconds)
seconds:经过了指定的seconds秒后会产生信号sigalrm
pause
使调用进程挂起直至捕捉到一个信号
函数原型:
#include <unistd.h>
int pause(void)
信号的处理
1可以忽略该信号或是使用指定的处理函数来处理该信号,或者使用系统默认的方式
2 使用简单的signal函数,或是使用信号集函数组
signal
函数原型
#include <signal.h>
void (*signal(int signo,void(*func)(int)))(int)
func可能的值是:
sig_ing 忽略此信号
sig_dfl 按系统默认方式处理
信号处理函数名 使用该函数处理
示例代码如下:
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
void my_func(int sign_no){
if(sign_no==SIGINT){
printf("i have get SIGINT\n");
}
else if(sign_no==SIGQUIT){
printf("i have get SIGQUIT\n");
}
}
int main(){
printf("waiting for signal SIGNINT or SIGQUIT \n");
/*注册信号处理函数*/
signal(SIGINT,my_func);
signal(SIGQUIT,my_func);
pause();
exit(0);
}
编译执行:
[root@localhost app]# gcc mysignal.c -o mysignal
[root@localhost app]# ./mysignal
waiting for signal SIGNINT or SIGQUIT
打开另一终端
查看进程id
[root@localhost ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 9837 0.0 0.0 1624 308 pts/1 S+ 02:38 0:00 ./mysignal
查看返回结果:
i have get SIGINT
- 浏览: 249449 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (303)
- c (31)
- c++ (16)
- java (18)
- c# (1)
- python (3)
- java web (6)
- oracle (7)
- sqlserver (2)
- mysql (2)
- android (24)
- android系统 (15)
- android多媒体部分 (15)
- android游戏 (12)
- linux (26)
- javaScript (1)
- ajax (1)
- node JS (2)
- html (5)
- apache (3)
- jboss (1)
- weblogic (0)
- 通信协议 (10)
- 云计算 (1)
- 分布式 (5)
- ejb (1)
- webservice (5)
- 设计模式 (16)
- JNI (6)
- swing (13)
- 版本控制 (1)
- UML (1)
- xml (4)
- spring (5)
- hibernate (5)
- struts1 (3)
- struts2 (4)
- ibatis (0)
- tomcat (2)
- 心得体会 (1)
- css (1)
- 嵌入式 (41)
- arm体系结构 (10)
发表评论
-
u-boot Makefile 文件分析
2013-06-01 21:44 2374Makefile文件分析 # #(C)Copyri ... -
uboot start.S文件分析
2013-06-03 22:18 1286U-boot第一个开始文件arch\arm\cpu\arm1 ... -
u-boot mkconfig文件分析
2013-05-31 21:29 1109Mkconfig文件分析 #!/bin/ ... -
链接地址学习笔记
2013-05-05 12:40 1241链接地址 启动过程 示例代码如下: ... -
DDR学习笔记
2013-05-11 14:19 1001DDR 15条地址线32k 128M*2(20)=2(2 ... -
nand flash学习笔记一
2013-05-13 21:05 933Nandflash 原理图上有data0-data7 ... -
openJTAG学习笔记一
2013-05-22 21:45 2132安装软件 光盘Windows\install目录下的 01.O ... -
linux进程管理学习笔记
2013-03-28 20:57 1296linux 进程管理 1 linux进程控制 进程的四个要素: ... -
字符设备驱动程序学习笔记一
2013-04-01 21:55 828linux 驱动程序 字符设备驱动程序 网络接口驱动程序 块设 ... -
字符设备驱动程序学习笔记二
2013-04-04 10:29 716字符驱动程序 1 设备号 字符设备通过字符设备文件来存取 ls ... -
字符设备驱动程序学习笔记三
2013-04-04 14:03 730memdev.h文件示例代码如下: #ifndef _MEM ... -
字符设备驱动程序学习笔记四
2013-04-05 11:12 556竟争与互斥 程序调试 1 ... -
GPIO学习笔记
2013-04-14 19:50 771用汇编点亮一个led 1看原理图GPK4=0,led亮G ... -
系统时钟学习笔记
2013-05-04 21:59 80312m晶振----->pll------>cpu ... -
UART学习笔记
2013-05-04 22:00 1101串口(UART) DIV_VAL=(PCLK/(bpsx1 ... -
linux内存管理学习笔记
2013-03-12 20:50 10001 linux内存管理 地址类型 物理地址 出现在cpu地址 ... -
嵌入式linux系统学习笔记
2013-03-06 21:39 899嵌入式linux内核制作 1 清除原有配置文件与中间文件 x8 ... -
原理图学习笔记一
2013-02-17 22:24 370画个草图也挺过瘾 -
进程间通信学习笔记一(管道通信)
2013-02-01 20:08 1364进程间通信(ipc) 应用场景: 数据传输 资源共享 通知事件 ... -
进程间通信学习笔记三(共享内存通信)
2013-02-16 21:40 579共享内存通信 被多个进程共享的一部分物理内存,是进程间共享数据 ...
相关推荐
学习笔记信号量和进程间通信
笔记_UNIX环境网络编程卷二进程间通信_中文第二版
MFC教程lesson 17-进程间通信.rar。 包含课程内容、视频、PPT、笔记。内容详尽,MFC珍藏。
《ORANGE’S:一个操作系统的实现》读书笔记(二十四)进程间通信(二)文章代码
这是本人学习期间整理的关于进程间通信的笔记,和一些代码
2023年通信学习笔记.docx
《ORANGE’S:一个操作系统的实现》读书笔记(二十五)进程间通信(三)文章代码
通信原理(第五版) 及通信网 PPT随读笔记 很不错的学习笔记!
【linux学习笔记-14】基本进程通信--信号 【linux学习笔记-15】基本进程通信--管道 【linux学习笔记-16】shell管道重定向程序的实现 【linux学习笔记--17】POSIX IPC——消息队列 【linux学习笔记--18】POSIX IPC...
【linux学习笔记-14】基本进程通信--信号.doc 【linux学习笔记-15】基本进程通信--管道.doc 【linux学习笔记-16】shell管道重定向程序的实现.doc 【linux学习笔记-1】使用GDB调试简单的用户程序.doc 【linux学习笔记...
Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习...
Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记
LabVIEW学习笔记LabVIEW学习笔记LabVIEW学习笔记LabVIEW学习笔记LabVIEW学习笔记LabVIEW学习笔记
CSS学习笔记CSS学习笔记CSS学习笔记CSS学习笔记
C语言学习笔记C语言学习笔记C语言学习笔记C语言学习笔记
C语言学习笔记 C语言学习笔记 C语言学习笔记 C语言学习笔记
maven学习笔记maven学习笔记maven学习笔记
李道本老师的信号的统计检测与估计理论第二版学习笔记 ,主要是绪论加1-3章的笔记公式是公式 编辑器打上,逻辑相对全面是按照课本介绍的顺序进行做的笔记公式。
Jquery学习笔记 Jquery学习笔记 Jquery学习笔记
Contiki学习笔记:进程、事件、etimer关系 Contiki 实例: Contiki学习笔记:创建两个交互进程 Contiki 主函数剖析: Contiki学习笔记:main函数剖析 Contiki学习笔记:启动一个进程process_start Contiki学习笔记...