1、信号通信

内核中存在64种信号,即linux 内核可以发送64种信号,命令“kill -l”可以查看

A - 信号的发送:kill、raise、alarm

kill(pid_t pid, int sig)

raise(int sig)   等价于 kill(getpid(), int sig) 即发给自己

附:终止进程  kill 9 进程号   或 raise(9) 终止自己   (9为SIGKILL信号)

alarm(int  n)  定时 n 秒

B - 信号的接收:pause、sleep、while

C - 信号的处理:signal

处理哪个信号

以什么方式处理(SIG_IGN忽略,SIG_DFL默认,myfun自定义)

2、getpid() 获得进程 id 号

getppid()获得父进程 id 号

3、exit(0)           等价于 kill(getppid(), 17)  即,向父进程发送 17 信号(SIGCHLD)

4、wait(NULL)     可回收僵尸进程。本身为阻塞函数

代码:

  1 #include <stdio.h>      //standard input output2 #include <sys/types.h>  //pid_t pid; fork()3 #include <signal.h>     //signal4 #include <stdlib.h>     //exit(0) 否则会有warning警告5 6 void myfun(int sig)7 {8         int i;9         for(i = 0; i < 5; i++)10         {11                 printf("sig = %d, i = %d\n",sig,i);12                 sleep(1);13         }14         return;15 }16 17 void myfun1(int sig)18 {19         printf("NOTE: exit() sig = %d\n",sig);20         wait(NULL);21         printf("NOTE: child process has been retrieved.\n");22         return;23 }24 25 int main()26 {27         pid_t pid;28         pid = fork();29         if(pid > 0)30         {31                 printf("parent pid = %d\n",getpid());32                 int i = 0;33                 signal(10, myfun);34                 //wait(NULL);   回收子进程的僵尸进程。但wait是阻塞函数。等待子进程结束时,后面的代码将无法执行35                 signal(17,myfun1);36                 while(1)37                 {38                         printf("parent process i = %d\n",i);39                         sleep(1);40                         i++;41                 }42         }43         if(pid == 0)44         {45                 printf("child pid = %d, parent pid = %d\n", getpid(), getppid());46                 sleep(3);47                 kill(getppid(),10);     //getppid()获取父进程id。10为SIGUSR1信号48                 sleep(3);49                 exit(0);        //等价于 kill(getppid(),17)。17 为 SIGCHLD信号50         }51         return 0;52 }

执行:

Linux C 进程间的信号通信相关推荐

  1. Linux C 进程间的IPC通信 之 消息队列(2)

    Linux C 进程间的IPC通信 之 消息队列 双向通信 代码:(进程1) 1 #include <stdio.h>2 #include <sys/msg.h>3 #incl ...

  2. Linux C 进程间的管道通信

    1.进程间的通信方式 a.管道通信:无名管道.有名管道 b.信号通信:包括信号的发送.接收和处理 c.IPC(Inter-Process Communication):共享内存.消息队列.信号灯 ** ...

  3. 【Linux】进程间通讯

    前提知识 进程间具有独立性 ,现在我们要打破独立性,去通讯,所以 通讯的成本一定很高. 又时候又需要多进程协同完成某种业务内容 ,例如以前: cat file | grep "hello&q ...

  4. 【Linux】-- 进程间通讯

    目录 进程间通讯概念的引入 意义(手段) 思维构建 进程间通信方式 管道 站在用户角度-浅度理解管道 匿名管道 pipe函数 站在文件描述符角度-深度理解管道 管道的特点总结 管道的拓展 单机版的负载 ...

  5. linux 下进程间通讯: 共享文件

    共享文件算是比较传统的进程间数据交换的一种方式,但是由于涉及到不同进程间反复文件I/O,难免显得有些效率低下.共享文件的本质,实际是就是某个进程向共享为念写入数据,一个或多个进程从文件中读取数据,有可 ...

  6. linux 不同进程间能否传递指针?(不能,虚拟地址进程私有,被不同进程映射到物理地址不同)

    不能 为了实现虚拟地址空间各进程私有,每个进程都拥有自己的页目录和页表结构,对不同进程而言,页目录中的页目录项值(PDE),以及页表中的页表项值(PTE)都是不同的,因此相同的指针(虚拟地址)被不同的 ...

  7. Linux C 进程间的IPC通信 之 消息队列(1)

    1.消息队列 与 共享内存 1-1 消息队列  和 管道 都属于 队列结构,读完了 就被删除 不存在,但 管道 是 顺序队列 ,而 消息队列 是 链式队列 1-2  消息队列 的读和写 可设为 阻塞模 ...

  8. Linux C 进程间的IPC通信 之 共享内存(二)

    1.父子进程(有亲缘关系)的IPC通信 int shmid;       shmid = shmget(IPC_PRIVATE, 128, IPC_CREAT | 0777); //创建共享内存,参数 ...

  9. Linux C 进程间的IPC通信 之 共享内存(一)

    1.IPC(inter - process communication)通信 共享内存.消息队列.信号灯 2.库 <sys/shm.h> 2-1  创建共享内存 int shmget( k ...

最新文章

  1. ASPNET 页面编码
  2. 解决ssh登录linux速度慢的问题(以centos7为例)
  3. 微信和html5的使用感觉,微信小程序和HTML5相比有何不同呢?
  4. python hashlib_python hashlib模块及md5() 、sha()
  5. 有效集法介绍(Active Set Method)
  6. mysql数据库学习——5,数据类型,字符集和校对
  7. c++线程间通信的几种方法_JAVA并发之线程amp;进程
  8. #Deep Learning回顾#之2006年的Science Paper
  9. java后端简历项目经历_java程序员简历项目经验怎么写
  10. python人工智能小程序_推荐几款“真”人工智能技术小程序
  11. 关于文件变化监听, 你了解多少?
  12. cs1.6服务器弹道优化,cs1.6弹道优化参数
  13. java this逃逸_java 中的 this 逃逸
  14. 计算机专业—毕业设计题目大全
  15. ios开发-- URL Schemes 使用详解
  16. 迪杰斯特拉--链式向前星
  17. jsp text边框_CSS设置DIV边框实例
  18. 虚拟机M0n0wall软件防火墙配置
  19. 陌陌宣布改名“挚文集团”:旗下现有 App 名称保持不变
  20. 看到“java单例模式”脑壳疼,学会这几招分分钟搞定

热门文章

  1. Debian安装PostgreSQL
  2. 猜数字游戏(比大小)
  3. 如何在苹果电脑中安装解压缩软件?
  4. 如何在Python中活学活用主题词模型(Topic Modeling)和隐狄利克雷分布(LDA)
  5. 电脑城特别加强工具盘【2008年春季版】
  6. project 2007 sn
  7. 七、golang中接口、反射
  8. TuGraph开源JAVA客户端工具TuGraph-OGM,无缝对接JAVA开发生态
  9. 用JS写出JS事件中京东图片放大特效
  10. 2021-12-06 自动化专业C语言上机作业参考答案06