fork,vfork,clone的区别Zz
来源:互联网 发布:在线浏览器代理软件 编辑:程序博客网 时间:2024/04/30 12:34
转载http://blog.chinaunix.net/uid-20665441-id-305483.html
一、fork
1. 调用方法#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);
正确返回:在父进程中返回子进程的进程号,在子进程中返回0
错误返回:-1
2. fork函数调用的用途
一个进程希望复制自身,从而父子进程能同时执行不同段的代码。
二、vfork
1. 调用方法
与fork函数完全相同
#include <sys/types.h>
#include <unistd.h>
pid_t vfork(void);
正确返回:在父进程中返回子进程的进程号,在子进程中返回0
错误返回:-1
2. vfork函数调用的用途
用vfork创建的进程主要目的是用exec函数执行另外的程序。
三、clone
1.调用方法
#include <sched.h>
int clone(int (*fn)(void *), void *child_stack, int flags, void *arg);
正确返回:返回所创建进程的PID,函数中的flags标志用于设置创建子进程时的相关选项,具体含义参看P25
错误返回:-1
2.clone()函数调用的用途
用于有选择地设置父子进程之间需共享的资源
四、fork,vfork,clone的区别
1. fork出来的子进程是父进程的一个拷贝,即,子进程从父进程得到了数据段和堆栈段的拷贝,这些需要分配新的内存;而对于只读的代码段,通常使用共享内存 的方式访问;而vfork则是子进程与父进程共享内存空间, 子进程对虚拟地址空间任何数据的修改同样为父进程所见;clone则由用户通过参clone_flags 的设置来决定哪些资源共享,哪些资源拷贝。
2. fork不对父子进程的执行次序进行任何限制,fork返回后,子进程和父进程都从调用fork函数的下一条语句开始行,但父子进程运行顺序是不定的,它 取决于内核的调度算法;而在vfork调用中,子进程先运行,父进程挂起,直到子进程调用了exec或exit之后,父子进程的执行次序才不再有限 制;clone中由标志CLONE_VFORK来决定子进程在执行时父进程是阻塞还是运行,若没有设置该标志,则父子进程同时运行,设置了该标志,则父进 程挂起,直到子进程结束为止。
- fork,vfork,clone的区别Zz
- Fork & vfork & clone (ZZ)
- fork,vfork,clone的区别
- fork/vfork/clone的区别
- fork()、 vfork()、 clone()的区别
- fork, vfork, clone的区别
- fork()、vfork()、clone()的区别
- fork(),vfork(),clone()的区别
- fork vfork clone区别
- fork,vfork,clone区别
- fork vfork clone区别
- vfork(),fork()与clone()的区别
- vfork(),fork()与clone()的区别
- clone(),fork()与vfork()的区别
- fork, vfork, clone, exec的区别
- Linux-fork(),vfork()和clone的区别
- fork, vfork, clone 与 pthread_create 的区别
- vfork,fork,clone,pthread_create 区别
- 建造者模式(Builder Pattern)
- 根据不同的输入值实现页面跳转.structs
- ivr地址
- C++第16周项目1(1)统计字符串/字符数组
- ubuntu各文件夹简介
- fork,vfork,clone的区别Zz
- 详细介绍Linux shell脚本基础学习(实例)
- Javascript网页打印大全
- VC编写vista或win7下需要管理员权限运行的程序
- json-c-0.9 在linux上编译使用
- 使用 screen 管理你的远程会话
- 【sed&awk】统计文本中单词的分布
- C++ 直接插入排序
- MFC里创建FLASH控件,并从内存流中载入SWF