fork()
是用于创建新进程的系统调用。通过fork()
系统调用创建的新进程被称为子进程,调用fork()
系统调用的进程被称为父进程。子进程的代码与父进程的代码相同。一旦子进程被创建,父进程和子进程都从fork()
之后的下一条语句开始执行,两个进程同时执行。
vfork()
也是一个系统调用,用于创建新的进程。通过vfork()
系统调用创建的新进程被称为子进程,调用vfork()系统调用的进程被称为父进程。子进程的代码和其父进程的代码相同。子进程暂停父进程的执行,直到子进程完成其执行,因为两个进程共享同一个地址空间。
fork()
和vfork()
的区别 :
编号 | fork() |
vfork() |
---|---|---|
1 | 在fork() 系统调用中,子进程和父进程有独立的内存空间。 |
在vfork() 系统调用中,子进程和父进程共享同一个地址空间。 |
2 | 子进程和父进程同时被执行。 | 一旦子进程被执行,父进程就开始执行。 |
3 | fork() 系统调用使用写时拷贝作为替代。 |
vfork() 系统调用不使用写时复制。 |
4 | 在fork() 系统调用中,子进程不会暂停父进程的执行。 |
子进程在vfork() 系统调用中暂停父进程的执行。 |
5 | 一个进程的页面不受其他进程的页面影响。 | 一个进程的页面被另一个进程的页面所影响。 |
6 | fork() 系统调用使用得多 |
vfork() 系统调用使用得少。 |
7 | 存在地址空间的浪费。 | 没有浪费地址空间。 |
8 | 如果子进程改变了地址空间中的页面,父进程是看不到的。 | 如果子进程改变了地址空间中的页面,那么它对父进程是可见的。 |
下一篇:描述性统计和推断统计的区别