<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>庆亮的博客-webgame架构 &#187; fork</title>
	<atom:link href="http://www.qingliangcn.com/tag/fork/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.qingliangcn.com</link>
	<description>关注LAMP&#124;PHP源代码分析&#124;web架构&#124;PHP扩展&#124;Erlang&#124;服务端架构</description>
	<lastBuildDate>Wed, 11 Aug 2010 15:25:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>linux下fork函数的一些理解</title>
		<link>http://www.qingliangcn.com/2009/05/linux%e4%b8%8bfork%e5%87%bd%e6%95%b0%e7%9a%84%e4%b8%80%e4%ba%9b%e7%90%86%e8%a7%a3/</link>
		<comments>http://www.qingliangcn.com/2009/05/linux%e4%b8%8bfork%e5%87%bd%e6%95%b0%e7%9a%84%e4%b8%80%e4%ba%9b%e7%90%86%e8%a7%a3/#comments</comments>
		<pubDate>Sun, 10 May 2009 11:59:16 +0000</pubDate>
		<dc:creator>庆亮</dc:creator>
				<category><![CDATA[Linux/Unix/BSD]]></category>
		<category><![CDATA[fork]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.nd21.com/?p=93</guid>
		<description><![CDATA[fork函数用于linux下创建进程, fork的字面意思为&#34;叉子&#34;, 从之后的内容中将会了解到&#34;叉子&#34;是非常的贴切的. fork原型为 pid_t fork() , 如果成功则返回子进程的进程id, 如果失败则返回-1, 通常在系统内存不够或者进程数已经达到上限时, fork才会失败. 让我们来看一段代码 #include&#160;&#60;unistd.h&#62; #include&#160;&#60;sys/types.h&#62; #include&#160;&#60;stdio.h&#62; #include&#160;&#60;stdlib.h&#62; int&#160;main() { &#160;&#160;&#160;&#160;pid_t&#160;&#160;&#160;child; &#160;&#160;&#160;&#160;if&#160;((child&#160;=&#160;fork()&#160;&#160;==&#160;&#160;-1) &#160;&#160;&#160;&#160;{ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;printf(&#34;fork&#160;error:&#160;%s\n&#34;,&#160;strerr(errno)); &#160;&#160;&#160;&#160;} &#160;&#160;&#160;&#160;else&#160;if&#160;(child&#160;==&#160;0) &#160;&#160;&#160;&#160;{ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;printf(&#34;I&#160;am&#160;child&#160;:&#160;%ld&#160;\n&#34;,&#160;getpid()); &#160;&#160;&#160;&#160;} &#160;&#160;&#160;&#160;else &#160;&#160;&#160;&#160;{ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;printf(&#34;I&#160;am&#160;parent&#160;:&#160;%ld&#34;,&#160;getpid()); &#160;&#160;&#160;&#160;} &#160;&#160;&#160;&#160;return&#160;0; } &#160; &#160; 先来看程序执行的结果: [root@localhost fork]# ./main I am child: 5731 I am parent : 5730 刚开始时, 我实在无法理解为什么可以运行if的两个分支. 仔细想想fork的作用: 创建进程 &#8212; 从父进程的此处开始复制执行.&#160;&#160; 当执行child]]></description>
			<content:encoded><![CDATA[<p>fork函数用于linux下创建进程, fork的字面意思为&quot;叉子&quot;, 从之后的内容中将会了解到&quot;叉子&quot;是非常的贴切的.<br />
fork原型为 pid_t fork() , 如果成功则返回子进程的进程id, 如果失败则返回-1, 通常在系统内存不够或者进程数已经达到上限时, fork才会失败.<br />
让我们来看一段代码<span id="more-93"></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">#include</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'">&lt;unistd.h&gt;</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">#include</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'">&lt;sys/types.h&gt;</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">#include</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'">&lt;stdio.h&gt;</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">#include</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'">&lt;stdlib.h&gt;</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">int</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;main()</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">{</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;pid_t&nbsp;&nbsp;&nbsp;child;</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">if</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;((child&nbsp;=&nbsp;fork()&nbsp;&nbsp;==&nbsp;&nbsp;-1)</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;{</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'">&quot;fork&nbsp;error:&nbsp;%s\n&quot;</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">,&nbsp;strerr(errno));</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">else</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">if</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;(child&nbsp;==&nbsp;0)</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;{</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'">&quot;I&nbsp;am&nbsp;child&nbsp;:&nbsp;%ld&nbsp;\n&quot;</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">,&nbsp;getpid());</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">else</span><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;{</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'">&quot;I&nbsp;am&nbsp;parent&nbsp;:&nbsp;%ld&quot;</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">,&nbsp;getpid());</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">return</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;0;</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">}</span></p>
<p><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt">
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt">&nbsp;</p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt">&nbsp;</p>
<p>先来看程序执行的结果:<br />
[root@localhost fork]# ./main<br />
I am child: 5731<br />
I am parent : 5730</p>
<p>刚开始时, 我实在无法理解为什么可以运行if的两个分支. <br />
仔细想想fork的作用: 创建进程 &#8212; 从父进程的此处开始复制执行.&nbsp;&nbsp;<br />
当执行child = fork() 时, 如果返回的是-1,也就是fork失败时, 则只输出fork错误信息. 但是如果成功的创建了进程, 那么从 child = fork() 开始的代码都将会被子进程继承, 一并继承的还有子进程的数据(除了文件锁, 未决信号集以及pid, ppid).&nbsp;&nbsp;从而子进程也会执行if ((child = fork()&nbsp;&nbsp;==&nbsp;&nbsp;-1) 这一句, 并进行if判断, fork函数在子进程中调用时会返回0 , 以表示自己是一个子进程. <br />
到这里大家应该明白为什么会输出if的两个分支了, 因为这是两个进程执行的结果. <br />
另外, fork函数在子进程中只是第一次运行时才会返回0 以表示自己的子进程身份, 而当第二次甚至更多次运行时则会创建新的属于自己的子进程. 来看下面的代码:<br />
(引用自http://www.cppblog.com/zhangxu/archive/2009/02/21/37640.html)<br />
&nbsp;</p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">#include</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'">&lt;unistd.h&gt;</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">#include</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'">&lt;sys/types.h&gt;</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">#include</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'">&lt;stdio.h&gt;</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">#include</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'">&lt;stdlib.h&gt;</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">int</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;main()</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">{</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;0;</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">for</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;(i=0;&nbsp;i&lt;3;&nbsp;i++)</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">{</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">pid_t&nbsp;&nbsp;&nbsp;child&nbsp;=&nbsp;fork();</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">if</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;(child&nbsp;==&nbsp;0)</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">{</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">printf(</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'">&quot;child\n&quot;</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">);</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">}</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">else</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;</span><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">if</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;(child&nbsp;&gt;&nbsp;0)</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">{</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">printf(</span><span style="font-family: 'Times New Roman'; color: rgb(163,21,21); font-size: 9pt; mso-spacerun: 'yes'">&quot;parent\n&quot;</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">);</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">}</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">}</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; color: rgb(0,0,255); font-size: 9pt; mso-spacerun: 'yes'">return</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">&nbsp;0;</span><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">}</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt">&nbsp;</p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-family: 'Times New Roman'; font-size: 9pt; mso-spacerun: 'yes'">输出的结果有7个father和7个child, 为什么呢? 第一次运行时, 产生一个子进程, 该子进程输出child, 并且自父进程获得i=0 , 子进程继续运行到for之后则i=1, 因而该子进程可以进行两次for循环, 依次类推即可得出结果. (通过图形理解比较容易.见上述链接)</span></p>
<p><!--EndFragment--></span><!--EndFragment--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.qingliangcn.com/2009/05/linux%e4%b8%8bfork%e5%87%bd%e6%95%b0%e7%9a%84%e4%b8%80%e4%ba%9b%e7%90%86%e8%a7%a3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

