linux 创建子进程的方式
2014-05-26 17:10
190 查看
linux系统中创建子进程的方式有如下三种:
1、fork
2、vfork
3、clone
这三个用户空间的API最终都是调用内核函数do_fork创建子进程。根据传递参数的不同,do_fork()函数将执行不同的操作。具体的调用关系如下图所示:
![](http://s3.51cto.com/wyfs02/M02/2A/48/wKiom1ODBYyxuJd7AAGVcRe0GEo053.jpg)
fork()--->sys_fork()--->do_fork(SIGCHLD,regs->sp,regs,0,NULL,NULL);
从fork()传递的参数可以看出,fork()函数产生的子进程不会共享父进程的任何资源,
vfork()--->sys_vfork()--->do_fork(CLONE_VORK|CLONE_VM|SIGCHLD,regs->sp,regs,0,NULL,NULL);
CLONE_VORK标志标明子进程会先于父进程执行,直到子进程结束或者执行新程序
CLONE_VM:标明子进程共享父进程的地址空间
clone()--->sys_clone()--->do_fork(clone_flages,newsp,regs,0,parent_id,child_id);
sys_clone()用于创建轻量级线程
1、fork
2、vfork
3、clone
这三个用户空间的API最终都是调用内核函数do_fork创建子进程。根据传递参数的不同,do_fork()函数将执行不同的操作。具体的调用关系如下图所示:
![](http://s3.51cto.com/wyfs02/M02/2A/48/wKiom1ODBYyxuJd7AAGVcRe0GEo053.jpg)
fork()--->sys_fork()--->do_fork(SIGCHLD,regs->sp,regs,0,NULL,NULL);
从fork()传递的参数可以看出,fork()函数产生的子进程不会共享父进程的任何资源,
vfork()--->sys_vfork()--->do_fork(CLONE_VORK|CLONE_VM|SIGCHLD,regs->sp,regs,0,NULL,NULL);
CLONE_VORK标志标明子进程会先于父进程执行,直到子进程结束或者执行新程序
CLONE_VM:标明子进程共享父进程的地址空间
clone()--->sys_clone()--->do_fork(clone_flages,newsp,regs,0,parent_id,child_id);
sys_clone()用于创建轻量级线程
相关文章推荐
- Linux下创建进程的三种方式及特点
- Linux下的进程类别(内核线程、轻量级进程和用户进程)以及其创建方式--Linux进程的管理与调度(四)
- Linux下的进程类别(内核线程、轻量级进程和用户进程)以及其创建方式--Linux进程的管理与调度(四)
- Linux进程的管理与调度(四) -- Linux下的进程类别以及其创建方式
- Linux 调用fork()创建两个子进程
- Linux2.6内核进程创建过程分析
- [linux] 创建daemon进程
- linux程序设计入门----进程介绍:linux下进程的创建
- 对linux中进程创建的一点理解(1)
- Linux下C语言编程--进程的创建
- 基于I386的Linux2.4.18进程创建的分析和实践
- 对linux中进程创建的一点理解(1)
- Linux下守护进程的创建例子
- linux系统中进程的创建
- linux中fork创建进程讲解
- linux 守护进程(daemon)的创建方法
- [linux] 创建daemon进程
- windows c++程序员开始用linux编程(二)创建新进程
- Linux下C语言编程--进程的创建
- Linux进程创建,子进程对父进程资源“写时拷贝”的证明 推荐