fork以及vfork

1、fork()通过复制父进程在内存中的映像创建了一个新的子进程。子进程继承了诸如环境和权限这样的父进程属性。子进程还继承了某些父进程资源,如打开的文件和设备

                     ,但不是父进程的每个属性或资源都被子进程继承。例如,子进程有一个新的进程id与父进程不同,子进程的CPU使用时间被重置为0.子进程没有获得父进程持有的锁

                     如果父进程设置了一个警报,父进程的警报到时的时候,不会通知子进程。即使父进程在执行fork时,父进程有挂起信号,子进程启动的时候也不会带有挂起信号。

 2、vfork(): 他控制创建的子进程先运行, 子进程在父进程的地址空间运行, 直到子进程调用exit()或exec。在exec()后,新的进程完全替代原来的子进程运行。


3、文件缓冲

       磁盘文件通常都是完全缓冲,FILE结构有一个缓冲区, 写的时候,先写进缓冲区,缓冲区满时, I/O子系统会用文件描述符调用write。程序执行fprintf的时刻和实际进行写操作的时刻之间的延时会造成很有趣的结果。因此,程序崩溃时, 程序看起来是正常结束,但是它的磁盘输出却是不完整的。

       程序怎样避免缓冲对他的影响?fflush调用会强制写出FILE结构中缓冲的任何内容,也可以用setvbuf禁止缓冲。

      与终端相关的文件是行缓冲(标准错误除外, 它默认是不缓冲的), 缓冲区被填满或者遇到一个换行符时,行会被写出。


4、文件描述符的继承

      fork()时, 如果在fork前打开文件, 则,父子进程共享打开的文件描述符和文件偏移量;如果在fork后, 打开文件, 则父子进程分别打开文件,且在系统文件表中创建了各自的新条目, 子进程没有继承文件描述符,没有共享文件偏移量。但是,父子进程还是共享了标准输入、标准输出和标准错误的系统文件表条目。


      注意: 一定注意, fork()前后, 文件描述符的继承关系,以及文件缓冲对输出的影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值