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. python类属性和对象属性、类的普通方法和静态方法

    类属性和对象属性的定义 class LearnClass(): #类属性 cls_attr = None def __init__(self,arg): #对象属性 self.obj_attr = a ...

  2. js uppercase first letter

    js uppercase first letter const str = `abc`; str.slice(0, 1).toUpperCase(); // "A" str.sli ...

  3. 开放式 Web 应用程序安全性项目 OWASP

    开放式 Web 应用程序安全性项目 OWASP Open Web Application Security Project (OWASP) OWASP 基金会是谁? Open Web Applicat ...

  4. React Creating Elements All In One

    React Creating Elements All In One https://reactjs.org/docs/react-api.html#creating-react-elements h ...

  5. Iterators & Generators in depth

    Iterators & Generators in depth https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/It ...

  6. Cocos Creator 游戏开发

    Cocos Creator 游戏开发 https://www.cocos.com/products#CocosCreator 一体化编辑器: 包含了一体化.可扩展的编辑器,简化了资源管理.游戏调试和预 ...

  7. Android Studio 4.x

    Android Studio 4.x https://developer.android.com/studio https://d.android.com/r/studio-ui/whats-new- ...

  8. Flutter Vignettes

    Flutter Vignettes Flutter Animation https://flutter.gskinner.com/ https://github.com/gskinnerTeam/fl ...

  9. C#使用OpenCV剪切图形中的人物头像

    前言 本文主要介绍如何使用OpenCV剪切图形中的人物头像. 准备工作 首先创建一个Wpf项目--OpenCV_Face_Wpf,这里版本使用Framework4.7.2. 然后使用Nuget搜索[E ...

  10. XSS跨站脚本攻击(1)

    将跨站脚本攻击缩写为XSS,恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页面的时候,嵌入其中的Web里面的Script代码就会被执行,从而达到恶意攻击用户的目的. 反射型XSS 反射 ...