1.fork
(1)fork系统调用执行一次返回两个值,对于父进程,fork函数返回子程序的进程号,而对于子进程,fork函数则返回零。
(2)子进程和父进程同时运行, 在复制过程中,子进程复制了父进程的数据段,代码段,子进程改变了父进程的变量时候, 通过copy_on_write(写时拷贝)手段为所涉及的页面建立一个新的副本, 使得子进程对数据的修改不影响父进程。
2.vfork
(1)vfork也是在父进程中返回子进程的进程号,在子进程中返回0, 但是vfork保证子进程先运行,此时父进程被挂起直到子进程调用exec或exit。若子进程下一条代码的执行依赖父进程,将造成死锁。
(2)用vfork创建的子进程与父进程共享地址空间,如果这时子进程修改了某个变量,这将影响到父进程。
3.clone
(1)系统调用fork和vfork是无参数的,而clone则带有参数。fork是全部复制,vfork是共享内存,而clone则可以将父进程资源有选择地复制给子进程, 通过其参数clone_flags控制。
(2)clone返回的是子进程的pid。