08-总结
28.5 总结
当打开进程记账功能时,内核会在系统中每一进程终止时将其账单记录写入一个文件。该记录包含进程使用资源的统计数据。
如同函数fork(),Linux特有的clone()系统调用也会创建一个新进程,但其对父子间的共享属性有更为精确的控制。该系统调用主要用于线程库的实现。
本章对fork()、vfork()和clone()的进程创建速度做了比较。尽管 vfork()要快于fork(),但较之于子进程随后调用exec()所耗费的时间,二者间的时间差异也就微不足道了。
fork()创建的子进程会从其父进程处继承(有时是共享)某些进程属性的副本,而对其他进程属性则不做继承。例如,子进程继承了父进程文件描述符表和信号处置的副本,但并不继承父进程的间隔定时器、记录锁或是挂起信号集合。相应地,进程执行exec()时,某些进程属性保持不变,而会将其他属性重置为缺省值。例如,进程ID保持不变,文件描述符保持打开(除非设置了执行时关闭标志),间隔定时器得以保存,挂起信号依然挂起,不过会将对已处理信号的处置重置为默认设置,同时与共享内存段“脱钩”。
更多信息
请参考24.6节列出的更多信息来源。[Frisch, 2002]第17章描述了对进程记账的管理,以及不同UNIX实现之间的差异。[Bovert & Vesati, 2005]介绍了系统调用clone()的实现。