65、请你来说⼀下 fork 函数
成功调⽤ fork() 会创建⼀个新的进程,它⼏乎与调⽤ fork() 的进程⼀模⼀样,这两个进程都会 继续运⾏。在⼦进程中,成功的fork( ) 调⽤会返回0。在⽗进程中 fork() 返回⼦进程的 pid。
如果出现错误, fork() 返回⼀个负值。
最常⻅的 fork() ⽤法是创建⼀个新的进程,然后使⽤ exec() 载⼊⼆进制映像,替换当前进程的 映像。这种情况下,派⽣(fork)了新的进程,⽽这个⼦进程会执⾏⼀个新的⼆进制可执⾏⽂件的映像。这种“派⽣加执⾏”的⽅式是很常⻅的。
在早期的 Unix 系统中,创建进程⽐较原始。当调⽤ fork 时,内核会把所有的内部数据结构复制⼀份,复制进程的⻚表项,然后把⽗进程的地址空间中的内容逐⻚的复制到⼦进程的地址空 间中。但从内核⻆度来说,逐⻚的复制⽅式是⼗分耗时的。现代的 Unix 系统采取了更
多的优化,例如 Linux,采⽤了写时复制的⽅法,⽽不是对⽗进程空间进程整体复制。
Last updated