linux下系统调用fork()是创建一个进程的唯一方法(vfork()函数其实是对fork()函数的一种封装) 除了极少数以特殊方式创建的进程如init进程,该进程是内核启动时创建的.
前面讲到过vfork()其实就是对fork()的一种封装;
fork与vfork 两个都是创建一个进程,但区别在哪里呢?
1, fork()创建的子进程,是几乎继承了父进程(创建他的进程)的全部资源如:共享的存储段,用户ID,组ID,上下文环境,资源限制,当前目路……等;但子进程的执行不影响父进程的数据.
而vfork()则是共享父进程的数据段,既就是子进程对同一变量的修改,会传递给父进程;
2; fork()创建的子进程与父进程的执行顺序取决于系统的调度算法,是,
而vfork()则是保证了先是子进程运行,当他调用exec或exit后,父进程才可能被调度运行,如果在调用exec或exit之前子进程要依赖父进程的某个行为,则会导致死锁
未完….