读书人

vfork到底有什么用?解决方案

发布时间: 2012-11-10 10:48:50 作者: rapoo

vfork到底有什么用?
看了vfork后,对它的用处非常费解。
Unix编程说vfork()和fork()的功能相同,除了不拷贝父进程的页表项,也就是说不会复制和父进程相关的资源,父子进程将共享地址空间,子进程对虚拟内存空间的任何实际修改实际上是在修改父进程虚拟内粗空间的内容。并且其父进程会被阻塞,直到子进程退出或者执行exec()函数族.这样由于父子进程共享地址空间,避免了fork在资源复制是的消耗。
这样说来vfork一调用就导致父进程阻塞,并且子进程的操作实际上也是对父进程空间的操作(应该可以这样理解吧),这样完全无法实现多进程,vfork有什么存在的必要。我有什么功能还必须得vfork让子进程做,还不如父进程自己直接做了呢。反正是要阻塞的。
谁帮我解释下,极度不解!

[解决办法]
摘一段:
在原来的UNIX中,fork()创建一个新的进程,它会复制父进程的空间。而在实际应用中,通常调用fork()后,子进程会调用exec()执行新的程序,这样fork()复制父进程空间就有些浪费,因此有vfork()调用,不进行复制,而是copy-on-write。
但现代的操作系统大多缺省使用copy-on-write,vfork()即和fork()一样了
[解决办法]

引用楼主 doreyike 的帖子:
看了vfork后,对它的用处非常费解。
Unix编程说vfork()和fork()的功能相同,除了不拷贝父进程的页表项,也就是说不会复制和父进程相关的资源,父子进程将共享地址空间,子进程对虚拟内存空间的任何实际修改实际上是在修改父进程虚拟内粗空间的内容。并且其父进程会被阻塞,直到子进程退出或者执行exec()函数族.这样由于父子进程共享地址空间,避免了fork在资源复制是的消耗。
这样说来vfork一调用就导致父进程阻塞,并且子进…

读书人网 >C++

热点推荐