热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

在fork()之后调用exec()会导致现有进程中的数据丢失

如何解决《在fork()之后调用exec()会导致现有进程中的数据丢失》经验,为你挑选了1个好方法。

我对linux编程比较陌生.我想知道exec()调用后的函数是否fork()会导致父进程中的数据丢失.



1> dbush..:

成功调用后fork,将创建一个与调用进程重复的新进程.复制的一件事是文件描述符,因此新进程可以读取/写入与原始进程相同的文件描述符.这些可能是文件,插座,管道等.

exec函数用新程序替换当前进程中当前运行的程序,覆盖该进程中旧程序的内存.因此,存储在旧程序的存储器中的任何数据都将丢失.但是,这不会影响分叉此进程的父进程.

当通过执行新程序时exec,任何没有设置FD_CLOEXEC(close-on-exec)标志的打开文件描述符(参见fcntl手册页)将再次保留.所以现在你有两个进程,每个进程可能运行一个不同的程序,它们都可以写入同一个文件描述符.如果发生这种情况,并且进程没有正确同步,则由一个进程写入文件的数据可能会被另一个进程覆盖.

因此,对于写入子进程从父进程继承的文件描述符,可能会发生数据丢失.


推荐阅读
author-avatar
旺仔牛叉糖
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有