据我所知:
1- 当调用
vfork
时,父进程等待直到子进程终止(但是当子进程调用 exec
时,将创建新的地址空间)。
2-
vfork
创建子进程时不使用 copy-on-write
。父级和子级都使用相同的地址空间。
3-
fork
在创建子进程时使用 copy-on-write
。
在一本操作系统书籍(操作系统概念,ABRAHAM SILBERSCHATZ)中,我读到在
vfork
中使用 shell
比 fork
更高效。我不明白为什么?
据我所知,使用
fork
时,在进行任何更改之前,都会调用 exec
,因此我们没有任何更改的页面,也没有任何页面副本(因为 copy-on-write
),因此 fork
和 vfork
应该具有相同的性能。
据我所知:
vfork:
因此避免了所有分配内存的过程,CPU 需要计算的东西也更少。
这就是 vfork 被认为更高效的主要原因。
Fork 更安全,因为有 2 个独立的内存分配。每个进程都有自己的进程并并行运行,它们不会干扰或等待另一个进程。
VFork 等待子进程执行或退出,这会导致更有序的执行,但也具有更多的内存灵活性。
结论 Vfork 更快,但 Fork 更安全
来源:我自己,AskDifference,TechDifferences