本质上这三个系统调用都是封装的do_fork(),fork和vfork在linux上又是通过clone来实现的,只要给clone传相应的参数就是了,如:
fork : clone(SIGCHILD,0);
vfork : clone(CLONE_VFORK | CLONE_VM | SIG_CHILD ,0);
但是既然名字都不一样,终究有点区别:
fork : 仅有的开销知识复制父进程的页表以及给子进程创建进程描述符(task_struct)。
vfork :功能和fork相同,区别在于vfork不拷贝父进程的页表项,子进程作为父进程的一个单独的线程在其地址空间运行,除非子进程退出或者执行exec(),否则父进程会一直阻塞下去。
clone :linux上的fork其实是通过clone来实现的,clone其实更具有一般性,它可以用来创建轻量级进程。
阅读(1567) | 评论(0) | 转发(0) |