Linux C 进程间的信号通信
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 进程间的信号通信相关推荐
- Linux C 进程间的IPC通信 之 消息队列(2)
Linux C 进程间的IPC通信 之 消息队列 双向通信 代码:(进程1) 1 #include <stdio.h>2 #include <sys/msg.h>3 #incl ...
- Linux C 进程间的管道通信
1.进程间的通信方式 a.管道通信:无名管道.有名管道 b.信号通信:包括信号的发送.接收和处理 c.IPC(Inter-Process Communication):共享内存.消息队列.信号灯 ** ...
- 【Linux】进程间通讯
前提知识 进程间具有独立性 ,现在我们要打破独立性,去通讯,所以 通讯的成本一定很高. 又时候又需要多进程协同完成某种业务内容 ,例如以前: cat file | grep "hello&q ...
- 【Linux】-- 进程间通讯
目录 进程间通讯概念的引入 意义(手段) 思维构建 进程间通信方式 管道 站在用户角度-浅度理解管道 匿名管道 pipe函数 站在文件描述符角度-深度理解管道 管道的特点总结 管道的拓展 单机版的负载 ...
- linux 下进程间通讯: 共享文件
共享文件算是比较传统的进程间数据交换的一种方式,但是由于涉及到不同进程间反复文件I/O,难免显得有些效率低下.共享文件的本质,实际是就是某个进程向共享为念写入数据,一个或多个进程从文件中读取数据,有可 ...
- linux 不同进程间能否传递指针?(不能,虚拟地址进程私有,被不同进程映射到物理地址不同)
不能 为了实现虚拟地址空间各进程私有,每个进程都拥有自己的页目录和页表结构,对不同进程而言,页目录中的页目录项值(PDE),以及页表中的页表项值(PTE)都是不同的,因此相同的指针(虚拟地址)被不同的 ...
- Linux C 进程间的IPC通信 之 消息队列(1)
1.消息队列 与 共享内存 1-1 消息队列 和 管道 都属于 队列结构,读完了 就被删除 不存在,但 管道 是 顺序队列 ,而 消息队列 是 链式队列 1-2 消息队列 的读和写 可设为 阻塞模 ...
- Linux C 进程间的IPC通信 之 共享内存(二)
1.父子进程(有亲缘关系)的IPC通信 int shmid; shmid = shmget(IPC_PRIVATE, 128, IPC_CREAT | 0777); //创建共享内存,参数 ...
- Linux C 进程间的IPC通信 之 共享内存(一)
1.IPC(inter - process communication)通信 共享内存.消息队列.信号灯 2.库 <sys/shm.h> 2-1 创建共享内存 int shmget( k ...
最新文章
- ASPNET 页面编码
- 解决ssh登录linux速度慢的问题(以centos7为例)
- 微信和html5的使用感觉,微信小程序和HTML5相比有何不同呢?
- python hashlib_python hashlib模块及md5() 、sha()
- 有效集法介绍(Active Set Method)
- mysql数据库学习——5,数据类型,字符集和校对
- c++线程间通信的几种方法_JAVA并发之线程amp;进程
- #Deep Learning回顾#之2006年的Science Paper
- java后端简历项目经历_java程序员简历项目经验怎么写
- python人工智能小程序_推荐几款“真”人工智能技术小程序
- 关于文件变化监听, 你了解多少?
- cs1.6服务器弹道优化,cs1.6弹道优化参数
- java this逃逸_java 中的 this 逃逸
- 计算机专业—毕业设计题目大全
- ios开发-- URL Schemes 使用详解
- 迪杰斯特拉--链式向前星
- jsp text边框_CSS设置DIV边框实例
- 虚拟机M0n0wall软件防火墙配置
- 陌陌宣布改名“挚文集团”:旗下现有 App 名称保持不变
- 看到“java单例模式”脑壳疼,学会这几招分分钟搞定