linux应用编程学习(6)信号

来源:互联网 发布:水镜先生知乎 编辑:程序博客网 时间:2024/05/17 04:09
一、信号:在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 所属头文件
<sys/types.h> <signal.h>
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 所属头文件
<signal.h>
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. }


<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(33) | 评论(0) | 转发(0) |
0

上一篇:静态函数库、动态链接库设置

下一篇:信号量的互斥与同步

相关热门文章
  • test123
  • 编写安全代码——小心有符号数...
  • 使用openssl api进行加密解密...
  • 一段自己打印自己的c程序...
  • 彻底搞定C语言指针详解-完整版...
给主人留下些什么吧!~~