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设备的抽象表示 中断 早期是没有进程这个概念,当出现中断技术以后才出现进程这个概念 ...
随机推荐
- adjust All In One
adjust All In One 调整 https://www.adjust.com/ Maximize the impact of your mobile marketing Adjust is ...
- 动态规划算法 All In One
动态规划算法 All In One dynamic programming leetcode https://leetcode.com/tag/dynamic-programming/ https:/ ...
- github & coding 2018
github & coding 2018 github & coding all in one https://github.com/topics/javascript react r ...
- codesign wants to access key 密码是什么
codesign wants to access key 密码是什么 真正的是开机密码,不是 apple id 密码 https://developer.apple.com/forums/thread ...
- git 强制提交 & 覆盖 origin/master
git 强制提交 & 覆盖 origin/master git 强制提交本地分支覆盖远程分支 # git push origin 分支名 --force # local $ git push ...
- git alias & zsh
git alias & zsh VPN & git work tree # git pull === gp ➜ .git git:(feature/select-seat-system ...
- Word带数学公式发布博客
Word公式编辑器无法直接上传博客,一个一个的转换LaTeX还要加$,十分麻烦. 下面是我昨天摸索出来的办法.作为博客新人,这个问题困扰我一晚上,能解决我也是非常高兴的. 如果各位前辈有好方法的话,请 ...
- 翻译:《实用的Python编程》02_01_Datatypes
目录 | 上一节 (1.7 函数) | 下一节 (2.2 容器) 2.1 数据类型和数据结构 本节以元组和字典为代表介绍数据结构. 原始数据类型 Python 有一些原始数据类型: 整数 浮点数 字符 ...
- ElasticSearch URI 查询
公号:码农充电站pro 主页:https://codeshellme.github.io 1,URI 查询格式 URI 查询的一般格式如下: GET /index_name/_search?q=key ...
- Elasticsearch 分片集群原理、搭建、与SpringBoot整合
单机es可以用,没毛病,但是有一点我们需要去注意,就是高可用是需要关注的,一般我们可以把es搭建成集群,2台以上就能成为es集群了.集群不仅可以实现高可用,也能实现海量数据存储的横向扩展. 新的阅读体 ...