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. Object 循环引用 All In One

    Object 循环引用 All In One circular reference bug var a = {}; a.a = a; refs deep copy bug https://segmen ...

  2. css & background-image & full page width & background-size

    css & background-image & full page width & background-size https://css-tricks.com/perfec ...

  3. outlook & email & animation

    outlook & email & animation tada position div

  4. macOS & Nginx

    macOS & Nginx ngnix # 使用 brew 安装(如果没有 brew 命令,需要自行安装 brew) $ brew install nginx $ nginx -h # 查看 ...

  5. 星盟全球投资副总裁DENIEL SOIBIM:如何激发创造力

    丹尼尔·索比姆毕业于加州理工大学,2005年通过创建投资俱乐部对潜力公司进行天使投资,获得了美国Blue Run高层的重视,任营收专家评估师,为Blue Run项目提案做风险评估,09年与泰勒·亚当斯 ...

  6. lock free(无锁并发)是什么

    一.非阻塞同步(Non-blocking Synchronization) 1. 无锁编程 / lock-free / 非阻塞同步 无锁编程,即不使用锁的情况下实现多线程之间的变量同步,也就是在没有线 ...

  7. lms微服务框架介绍

    lms 框架简介 Lms是一个旨在通过.net平台快速构建微服务开发的框架.具有稳定.安全.高性能.易扩展.使用方便的特点.lms内部通过dotnetty实现高性能的rpc通信,使用zookeeper ...

  8. redis缓存穿透穿透解决方案-布隆过滤器

    redis缓存穿透穿透解决方案-布隆过滤器 我们先来看一段代码 cache_key = "id:1" cache_value = GetValueFromRedis(cache_k ...

  9. 手把手教你Centos7 部署 gitlab社区版

    一.前置说明: 操作系统:Centos 7 物理内存:>=2G 本人亲测,如果安装低版本的gitlab,比如我这里所使用的v8.17.0,物理内存1G,swap 2G虚拟内存即可部署.高版本的所 ...

  10. Centos7 升级 sqlite3

    下载地址:https://www.sqlite.org/download.html [root@djangoServer ~]# wget https://www.sqlite.org/2019/sq ...