fork、exec 和 exit 对 IPC 对象的影响
GitHub: https://github.com/storagezhang
Emai: debugzhang@163.com
华为云社区: https://bbs.huaweicloud.com/blogs/249238
本文摘自《UNIX 网络编程 卷2:进程间通信》 1.5 节
fork、exec 和 _exit 函数对于所讨论的各种形式的 IPC 的影响(_exit 是由 exit 调用的一个函数):
| IPC 类型 | fork | exec | _exit |
|---|---|---|---|
| 管道和 FIFO | 子进程取得父进程的所有打开着的描述符的副本 | 所有打开着的描述符继续打开着,除非已设置描述符的 FD_CLOEXEC 位 |
关闭所有打开着的描述符,最后一个关闭时删除管道或 FIFO 中残留的所有数据 |
| Posix 消息队列 | 子进程取得父进程的所有打开着的消息队列描述符的副本 | 关闭所有打开着的消息队列描述符 | 关闭所有打开着的消息队列描述符 |
| System V 消息队列 | 没有效果 | 没有效果 | 没有效果 |
| Posix 互斥锁和条件变量 | 若驻留在共享内存区中而且具有进程间共享属性,则共享 | 除非在继续打开着的共享内存区中而且具有进程间共享属性,否则消失 | 除非在继续打开着的共享内存区中而且具有进程间共享属性,否则消失 |
| Posix 读写锁 | 若驻留在共享内存区中而且具有进程间共享属性,则共享 | 除非在继续打开着的共享内存区中而且具有进程间共享属性,否则消失 | 除非在继续打开着的共享内存区中而且具有进程间共享属性,否则消失 |
| Posix 有名信号量 | 若驻留在共享内存区中而且具有进程间共享属性,则共享 | 除非在继续打开着的共享内存区中而且具有进程间共享属性,否则消失 | 除非在继续打开着的共享内存区中而且具有进程间共享属性,否则消失 |
| System V 信号量 | 子进程中所有 semadj 值都置为 0 |
所有 semadj 值都携入新程序中 |
所有 semadj 值都加到相应的信号量值上 |
| fcntl 记录上锁 | 子进程不继承由父进程持有的锁 | 只要描述符继续打开着,锁就不变 | 解开由进程持有的所有未处理的锁 |
| mmap 内存映射 | 父进程中的内存映射存留到子进程中 | 去除内存映射 | 去除内存映射 |
| Posix 共享内存区 | 父进程中的内存映射存留到子进程中 | 去除内存映射 | 去除内存映射 |
| System V 共享内存 | 附接着的共享内存区在子进程中继续附接着 | 断开所有附接着的共享内存区 | 断开所有附接着的共享内存区 |
| 门 | 子进程取得父进程的所有打开着的描述符,但是客户在门描述符上激活其过程时,只有父进程是服务器 | 所有门描述符都应关闭,因为它们创建时设置了 FD_CLOEXEC 位 |
关闭所有打开着的描述符 |
fork、exec 和 exit 对 IPC 对象的影响的更多相关文章
- fork+exec 与system,popen区别
1.fork + exec fork用来创建一个子进程.一个程序一调用fork函数,系统就为一个新的进程准备了前述三个段,首先,系统让新的进程与旧的进程使用同一个代码段,因为它们的程序还是相同的,对于 ...
- docker-compose exec时 出现"fork/exec /proc/self/exe: no such file or directory" 报错
问题:跟往常一样执行docker-compos exec redis sh时出现如下错误,而容器是运行状态中. # docker-compose exec redis sh rpc error: co ...
- electron-vue在npm run build时报错 ⨯ cannot execute cause=fork/exec C:\Users\801\AppData\Local\electron-builder\Cache\winCodeSign\winCodeSign-2.5.0\rcedit-ia32.exe: Access is denied.
问题描述 在electron-vue执行npm run build时报错,错误如下: ⨯ cannot execute cause=fork/exec C:\Users\801\AppData\Loc ...
- 获取fork+exec启动的程序的PID值
问题背景 业务中有个场景需要自动起一个A程序(由于A程序与 sublime_text 启动后遇到的问题有相似之处,后文就用 sublime_text 来替代A程序,当A程序与 sublime_ ...
- shell 脚本实战笔记(1)--source/fork/exec的区别
在linux shell编程中, 随着脚本处理规模的变大, 会嵌套调用子进程. 但父进程以不同的方式调用子进程, 其结果和背后的机制不尽相同.这边就简单描述下source/fork/exec调用子进程 ...
- IPC对象的持续性
转载:http://book.51cto.com/art/201006/207275.htm <UNIX网络编程:第2版.第2卷,进程间通信>本书全面深入地讲解了各种进程间通信形式,包括消 ...
- shell调用另一个脚本的三种方式fork/exec/source
exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息. bash shell的命令分为两 ...
- Linux系统编程——进程间通信(System V IPC 对象)
基本查看命令 ipcs -m查看共享内存 ipcs -s查看信号量 ipcs -q查看消息队列 ipcrm -m id 删除共享内存 -M+key值 ipcrm ...
- linux第1天 fork exec 守护进程
概念方面 文件是对I/O设备的抽象表示.虚拟存储器是对主存和磁盘I/O设备的抽象表示.进程则是对处理器.主存和I/O设备的抽象表示 中断 早期是没有进程这个概念,当出现中断技术以后才出现进程这个概念 ...
随机推荐
- u-boot 移植 --->2、在u-boot新增SOC和板子
本次主要是要新增一个samsung的芯片到u-boot中,网上查阅资料发现s5pc1xx是与手上的S5PV210的友善的Tiny版子寄存器兼容的比较多,所以就准备以他为基础增加一个我的板子的支持到u- ...
- VuePress config All In One
VuePress config All In One docs/.vuepress/config.js const { title, description, } = require('../../p ...
- CSS clip-path in action
CSS clip-path in action <!DOCTYPE html> <html lang="en"> <head> <meta ...
- Typescript & readonly property
Typescript & readonly property https://www.typescriptlang.org/docs/handbook/classes.html#readonl ...
- js & void() & void(0)
js & void() & void(0) https://www.runoob.com/js/js-void.html void() <a href="javascr ...
- vue watch & arrow function bug
vue watch & arrow function bug watch: { GeoJSON: function(newValue, oldValue) { log(`\n\n\nGeoJS ...
- js 实现简单的parseInt和parseFloat
function myParseInt(str: string): number { let result = NaN; for (let i = 0; i < str.length; i++) ...
- Datahero inc:区块链方案如何在现有食品溯源系统里实现落地?
在食品行业,区块链溯源平台的应用,主要是指围绕"从农田到餐桌"的安全管理理念,综合运用区块链技术.大数据技术和二维码技术等前沿技术,具有产品生产企业管理. 产品生产档案 (农药/防 ...
- 发布Jar包到maven中央仓库
什么是maven中央仓库 maven是java世界最流行的构建工具,构建内容囊括了一个java项目的整个生命周期.其中最重要的功能就是依赖管理,maven通过一个类似云的ftp站点统一管理所有java ...
- vue学习遇到的问题
1.vue脚手架的安装,解决链接:https://www.cnblogs.com/qcq0703/p/14439467.html2.2.2.0+ 的版本里,当在组件上使用 v-for 时,key 现在 ...