Chinaunix首页 | 论坛 | 博客
  • 博客访问: 477243
  • 博文数量: 223
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2145
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-01 10:23
个人简介

该坚持的时候坚持,该妥协的时候妥协,该放弃的时候放弃

文章分类

全部博文(223)

文章存档

2017年(56)

2016年(118)

2015年(3)

2014年(46)

我的朋友

分类: C/C++

2016-10-18 22:36:21

一、信号:在Linux系统中,信号(signal)同样也是最为古老的进程间通信机制。
二、
信号处理流程:①选择信号②发送信号③处理信号
三、信号类型:Linux系统支持的所有信号均定义在/usr/include/asm/signal.h(展示),其中常见的信号有:
  • SIGKILL: 杀死进程
  • SIGSTOP:暂停进程
  • SIGCHLD:子进程停止或结束时用来通知父进程
四、函数学习:
6.1 发送信号
6.1.1 函数名
Kill
6.1.2 函数原形
Int kill(pid_t pid, int sig);
6.1.3 函数功能
发送信号给进程
6.1.4 所属头文件
6.1.5 返回值
成功:0 失败:-1
6.1.6 参数说明
Pid:>0接收进程ID,0发送给所有进程组的进程。-1,发送给所有有发送权限的进程ID除了init进程。<-1,发送给所有进程组的-pid的进程。
Sig:要发送的信号,0的话不发送,单确认error来确认是否有进程。
6.2 处理信号
6.2.1 函数名
Signal
6.2.2 函数原形
Typedef void (*sighandler_t)(int);
Sighandler_t signal(int signum, sighandler_t handler);
6.2.3 函数功能
设置信号处理方式
6.2.4 所属头文件
6.2.5 返回值
成功:返回函数处理之前的值  失败:SIG_ERR
6.2.6 参数说明
Signum:接收到的信号
Handler:对应信号的处理方式,可以取值
SIG_IGN:忽略这个信号(不处理)
SIG_DEL:交给内核处理
用户自定义的函数:交给用户自定义的函数来处理

a_signal.c:
  1. #include <sys/types.h>
  2. #include <signal.h>
  3. #include <stdio.h>

  4. void main(int argc, char *argv[])
  5. {
  6.     pid_t pid;
  7.     if(argc < 1)
  8.     {
  9.         printf("usage:a_signal [pid]\n");
  10.         return;
  11.     }
  12.     pid = atoi(argv[1]);
  13.     kill(pid,SIGINT);

  14. }
b_signal.c:
  1. #include <signal.h>
  2. #include <unistd.h>

  3. typedef void (*sighandler_t)(int);

  4. void myfunc(int a)
  5. {
  6.     printf("Process B received SIGINT\n");
  7. }

  8. void main()
  9. {
  10.     signal(SIGINT , myfunc);
  11.     pause();
  12. }


阅读(459) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~