fork, vfork 和 clone

本文详细对比了fork、vfork及clone三种进程创建方式的特点。fork返回两次不同值,实现父子进程独立;vfork保证子进程先运行且共享内存,但可能导致死锁;clone则灵活控制资源复制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.fork
(1)fork系统调用执行一次返回两个值,对于父进程,fork函数返回子程序的进程号,而对于子进程,fork函数则返回零。
(2)子进程和父进程同时运行, 在复制过程中,子进程复制了父进程的数据段,代码段,子进程改变了父进程的变量时候, 通过copy_on_write(写时拷贝)手段为所涉及的页面建立一个新的副本, 使得子进程对数据的修改不影响父进程。
2.vfork
(1)vfork也是在父进程中返回子进程的进程号,在子进程中返回0, 但是vfork保证子进程先运行,此时父进程被挂起直到子进程调用exec或exit。若子进程下一条代码的执行依赖父进程,将造成死锁。
(2)用vfork创建的子进程与父进程共享地址空间,如果这时子进程修改了某个变量,这将影响到父进程。
3.clone
(1)系统调用fork和vfork是无参数的,而clone则带有参数。fork是全部复制,vfork是共享内存,而clone则可以将父进程资源有选择地复制给子进程, 通过其参数clone_flags控制。
(2)clone返回的是子进程的pid。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值