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设备的抽象表示 中断 早期是没有进程这个概念,当出现中断技术以后才出现进程这个概念 ...
随机推荐
- webpack remove console.log
webpack remove console.log https://stackoverflow.com/questions/41040266/remove-console-logs-with-web ...
- vue & async mounted
vue & async mounted refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
- popstate 事件 & history API
popstate 事件 & history API URL change 当用户浏览会话历史记录时,活动历史记录条目发生更改时,将触发 Window 界面的 popstate 事件. 它将当前 ...
- Python Tutorials
Python Tutorials Real Python https://realpython.com/ https://realpython.com/courses/ https://realpyt ...
- svg-path-to-polygons & svg-path-parser
svg-path-to-polygons & svg-path-parser svg-path-to-polygons https://www.npmjs.com/package/svg-pa ...
- 聊聊ASP.NET Core中的配置
作为软件开发人员,我们当然喜欢一些可配置选项,尤其是当它允许我们改变应用程序的行为而无需修改或编译我们的应用程序时.无论你是使用新的还是旧的.NET时,可能希望利用json文件的配置.在这篇文章中, ...
- Django Admin 配置和定制基本功能(基本二次开发配置)
一 列表显示页面 1. list_display,列表时,定制显示的列 @admin.register(models.UserInfo) class UserAdmin(admin.ModelAdm ...
- 【Notes】现代图形学入门_01
跟着闫令琪老师的课程学习,总结自己学习到的知识点 课程网址GAMES101 B站课程地址GAMES101 课程资料百度网盘[提取码:0000] 计算机图形学概述 计算机图形学是一门将模型转化到屏幕上图 ...
- python进阶(11)生成器
生成器 利用迭代器,我们可以在每次迭代获取数据(通过next()方法)时按照特定的规律进行生成.但是我们在实现一个迭代器时,关于当前迭代到的状态需要我们自己记录,进而才能根据当前状态生成下一个数据. ...
- AOP +FreeSql 跨方法异步事务
AOP +FreeSql 跨方法异步事务 Autofac.Extensions.DependencyInjection Autofac.Extras.DynamicProxy Castle.Core. ...