linux创建进程

linux创建进程

ID:27548848

大小:63.05 KB

页数:6页

时间:2018-12-03

linux创建进程_第1页
linux创建进程_第2页
linux创建进程_第3页
linux创建进程_第4页
linux创建进程_第5页
资源描述:

《linux创建进程》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、fork,vfork,clone都是linux的系统调用,用来创建子进程的(确切说vfork创造岀来的是线程)。先介绍下进程必须的4要点:a.要柯一段程序供该进程运行,就像一场戏剧要科一个剧木一样。该程序是可以被多个进程共享的,多场戏剧用一个剧本一样。b.奋起码的私奋财产,就足进程专川的系统堆栈空间。(:膚“户丨I”,既揀作系统所说的进程校制块,在linux屮具体实现是task_structd.有独立的存储空间。当一个进程缺少d条件吋候,我们称其为线程。1.fork创造的子进程复制了父亲进程的资源,包拈内存的内界t

2、ask_struct内矜(2个进程的pid不同)。这里是资源的复制不是指针的复制。下逝的例子可以看出[root@liumengliprogram]#cattestFork.c#include',stdio.h,'intmain(){intcount=1;intchild;if(!(child=fork())){//开始创建子进程printf(”Thisisson,hiscountis:%d.andhispidis:%d",++count,getpid());//子进程的内界}else{printf(HThisi

3、sfather,hiscountis:%d,hispidis:%d",count,getpid());}}[root@liumengliprogram]#gcctestFork.c-otestFork[root@liumengliprogram]#./testForkThisisson,hiscountis:2.andhispidis:3019Thisisfather,hiscountis:1,hispidis:3018[root@liumengliprogram]#从代码里面可以看出2者的pid不内存资源co

4、unt是值得复制,子进程改变了count的伉,而父进程中的count没有被改变。有人认为这样大批量的复制会导致执行效率过低。其实在复制过程屮,子进程复制了父进程的task_struct,系统堆栈空M和页血表,这意味着上面的程序,我们没有执行count++前,M:实了进程和父进程的count指h'd的是同一块内存。而当子进程改变了父进程的变量吋候,会通过copy_on_write的手段为所涉及的贝面建立一个新的副本。所以当我们执行++count后,这吋候子进积才新建了一个页面复制原來页面的内界,基木资源的复制是必须的

5、,而目.是高效的。整体看上去就像是父进程的独立存储空闽也S制了一遍。其次,我们看到子进程和父进程直接没有互相干扰,明姑2者资源都独立了。我们看下面程序[root@liumengliprogram]#cattestFork.c#include"stdio.h"intmain(){intcount=1;intchild;if(!(child=fork())){inti;for(i=0;i<200;i++){printf(”Thisisson,hiscountis:%d.andhispidis:%d",i,getpi

6、d());}}else{printf(”Thisisfather,hiscountis:%d,hispidis:%d",count,getpid());}}[root@liumengliprogram]#gcctestFork.c-otestFork[root@liumengliprogram]#./testFork•••Thisisson,hiscountis:46.andhispidis:4092Thisisson,hiscountis:47.andhispidis:4092Thisisson,hiscou

7、ntis:48.andhispidis:4092Thisisson,hiscountis:49.andhispidis:4092Thisisson,hiscountis:50.andhispidis:4092Thisisfather,hiscountis:1,hispidis:4091[root@liumengliprogram]#Thisisson,hiscountis:51.andhispidis:4092Thisisson,hiscountis:52.andhispidis:4092•••(运气很衰,非要20

8、0多个j有效果,郁闷)从结果可以看ill父子2个进程是M步运行的。这和下面的vfork有区别。2.vfork创建出来的不是真正意义上的进程,而是一个线程,因为它缺少了我们上而提到的进程的四要素的笫4项,独立的内存资源,看下面的程序[root@liumengliprogram]#cattestVfork.cinclude"stdio.h"intmain(){i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。