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 对象的影响的更多相关文章

  1. fork+exec 与system,popen区别

    1.fork + exec fork用来创建一个子进程.一个程序一调用fork函数,系统就为一个新的进程准备了前述三个段,首先,系统让新的进程与旧的进程使用同一个代码段,因为它们的程序还是相同的,对于 ...

  2. 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 ...

  3. 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 ...

  4. 获取fork+exec启动的程序的PID值

    问题背景     业务中有个场景需要自动起一个A程序(由于A程序与 sublime_text 启动后遇到的问题有相似之处,后文就用 sublime_text 来替代A程序,当A程序与 sublime_ ...

  5. shell 脚本实战笔记(1)--source/fork/exec的区别

    在linux shell编程中, 随着脚本处理规模的变大, 会嵌套调用子进程. 但父进程以不同的方式调用子进程, 其结果和背后的机制不尽相同.这边就简单描述下source/fork/exec调用子进程 ...

  6. IPC对象的持续性

    转载:http://book.51cto.com/art/201006/207275.htm <UNIX网络编程:第2版.第2卷,进程间通信>本书全面深入地讲解了各种进程间通信形式,包括消 ...

  7. shell调用另一个脚本的三种方式fork/exec/source

    exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息. bash shell的命令分为两 ...

  8. Linux系统编程——进程间通信(System V IPC 对象)

    基本查看命令 ipcs  -m查看共享内存        ipcs -s查看信号量        ipcs -q查看消息队列 ipcrm  -m  id 删除共享内存   -M+key值 ipcrm ...

  9. linux第1天 fork exec 守护进程

    概念方面 文件是对I/O设备的抽象表示.虚拟存储器是对主存和磁盘I/O设备的抽象表示.进程则是对处理器.主存和I/O设备的抽象表示 中断 早期是没有进程这个概念,当出现中断技术以后才出现进程这个概念 ...

随机推荐

  1. Creative Commons : CC (知识共享署名 授权许可)

    1 https://creativecommons.org/      Keep the internet creative, free and open. Creative Commons help ...

  2. vue-cli & plugin:vue/strongly-recommended bug

    vue-cli & plugin:vue/strongly-recommended bug ESLint plugin:vue/strongly-recommended module.expo ...

  3. Node.js Backend Developer

    Node.js Backend Developer refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  4. Dart DevTools & Flutter

    Dart DevTools & Flutter https://flutter.dev/docs/development/tools/devtools/overview https://dar ...

  5. WiFi & QR Code

    WiFi & QR Code https://github.com/bndw/wifi-card https://wifi.dev.bdw.to/ 扫码登录 WIFI:T:WPA;S:free ...

  6. react-parent-child-lifecycle-order

    react-parent-child-lifecycle-order react parent child lifecycle order live demo https://33qrr.csb.ap ...

  7. Regular Expressions all in one

    Regular Expressions all in one Regular Expressions Cheatsheet https://developer.mozilla.org/en-US/do ...

  8. Chrome DevTools & console & filter warning

    Chrome DevTools & console & filter warning

  9. UML类图介绍&类的六大关系

    UML类图介绍&类的六大关系 官方定义 UML(统一建模语言),是一种用于软件系统分析和设计的语言工具,用于帮助软件开发人员进行思考和记录思路的方式 UML 图形化的语言 基本介绍 UML图: ...

  10. Vue学习笔记-Vue.js-2.X 学习(二)===>组件化开发

    ===重点重点开始 ========================== (三) 组件化开发 1.创建组件构造器: Vue.extends() 2.注册组件: Vue.component() 3.使用 ...