码迷,mamicode.com
首页 > 系统相关 > 详细

linux-fork&vfork

时间:2016-06-28 08:15:27      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:linux-fork&vfork

      首先创建一个进程有两种做法,fork()和execve()他们都是系统调用,但是运行方式不同。

创建一个进程可以使用fork系统调用,然后子进程会得到父进程的数据段,栈段和堆区的一份拷贝,子进程可以独立修改这些内存段,但是文本段是父进程和子进程的共享段,子进程不能修改;

如果使用execve创建一个进程,这个系统会销毁所有的内存段去创建一个新进程,execve和fork创建的进程都是运行进程的子进程

一.fork

技术分享


(1)父子进程谁先运行不知道,由调度器决定,但是我们期望子进程先结束

(2)Ls文件重定向:运行结果本应该显示在显示器上的,用了文件重定向后结果显示在文件当中

技术分享


(3)需要注意的是:rm -rf是一个伪目标,伪目标也是目标文件,但是它根据依赖方法生成目标文件的时候,并不会实际生成文件,而只是执行它的方法


(4)程序运行结果:

技术分享


第一次执行完成之后有两个进程,父进程和子进程 

第二次执行完成之后子进程会生成两个进程,之前的父进程也会生成两个进程

所以这个循环结束之后一共生成六个进程

    子进程是父进程的副本,例如子进程获得父进程的数据空间‘堆栈空间,父进程不共享这些存储空间部分。父子进程共享正文段;

二.vfork

vfork也是用于创建一个进程,但它不会将父进程的地址空间复制到子进程中,相反在子进程调用exec或exit之前它在父进程的地址空间运行,也就是说会更改父进程的数据段,堆,栈,vfork与fork的另一个区别在于vfork保证子进程先运行,在它调用exec或exit之后父进程才有运行。



linux-fork&vfork

标签:linux-fork&vfork

原文地址:http://10808695.blog.51cto.com/10798695/1793477

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!