<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post//</link>
<title><![CDATA[[实践OK]linux中fork同时创建多个子进程的方法]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Unix/LinuxC技术]]></category>
<pubDate>Wed, 15 Jan 2014 06:37:07 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	子进程和主进程得判断一下，否则会运行两次：<br/><textarea name="code" class="php" rows="15" cols="100">
 cat forkn.c 
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;sys/types.h&gt;
#include &lt;sys/wait.h&gt;
#include &lt;unistd.h&gt;
#include &lt;stdarg.h&gt;
#include &lt;sys/socket.h&gt;
#include &lt;sys/epoll.h&gt;
#include &lt;netinet/in.h&gt;
#include &lt;arpa/inet.h&gt;
#include &lt;fcntl.h&gt;
#include &lt;unistd.h&gt;
#include &lt;stdio.h&gt;
#include &lt;sys/syscall.h&gt;
#include &lt;pthread.h&gt;
#include &lt;errno.h&gt;
#include &lt;sys/types.h&gt;
#include &lt;sys/mman.h&gt;
#include &lt;sys/prctl.h&gt;
#include &lt;signal.h&gt;
#include &lt;getopt.h&gt;
#include &lt;semaphore.h&gt;
#include &lt;string.h&gt;
#include &lt;stdbool.h&gt;
#include &lt;assert.h&gt; 
#define GET_ARRAY_LEN(array) (sizeof(array) / sizeof(array[0]))
int main()&#123;
&nbsp;&nbsp;int i;
&nbsp;&nbsp;//int len = 250 * 1024 * 1024 + 143532032;
&nbsp;&nbsp;int len = 1 * 1024 * 1024 * 1024;
&nbsp;&nbsp;char&nbsp;&nbsp;* uploadTime;
&nbsp;&nbsp;uploadTime = (char *) malloc(sizeof(char) * len);
&nbsp;&nbsp;for(i=0;i&lt;len;i++)&#123;
&nbsp;&nbsp;&nbsp;&nbsp;uploadTime[i++] = &#039;a&#039;;
&nbsp;&nbsp;&#125;
&nbsp;&nbsp;uploadTime[len] = &#039;&#92;0&#039;;
&nbsp;&nbsp;printf(&quot;finished len=%d&#92;n&quot;,len);
&nbsp;&nbsp;int pid=fork();
&nbsp;&nbsp;if(pid &lt; 0)
&nbsp;&nbsp;exit(EXIT_FAILURE);
&nbsp;&nbsp;if(pid == 0)
&nbsp;&nbsp;&#123;//子进程
&nbsp;&nbsp;&nbsp;&nbsp;//for(i=0;i&lt;len;i++)&#123;
&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp; uploadTime[i++] = &#039;b&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp; uploadTime[len] = &#039;&#92;0&#039;;
&nbsp;&nbsp;&nbsp;&nbsp;//&#125;
&nbsp;&nbsp;&nbsp;&nbsp;//uploadTime[len] = &#039;&#92;0&#039;;
&nbsp;&nbsp;&#125;
&nbsp;&nbsp;if(pid &gt; 0)&#123;
&nbsp;&nbsp;&nbsp;&nbsp; //父进程继续
&nbsp;&nbsp;&nbsp;&nbsp; //for(i=0;i&lt;len;i++)&#123;
&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;uploadTime[i++] = &#039;a&#039;;
&nbsp;&nbsp;&nbsp;&nbsp; //&#125;
&nbsp;&nbsp;&nbsp;&nbsp; //uploadTime[len] = &#039;&#92;0&#039;;
&nbsp;&nbsp;&#125;

&nbsp;&nbsp;while(1)&#123;
&nbsp;&nbsp;&nbsp;&nbsp;sleep(1);
&nbsp;&nbsp;&#125;
&nbsp;&nbsp;return 1;
&#125;
</textarea><br/><br/><br/>cat Makefile <br/>malloc:malloc.c&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gcc -g -o&nbsp;&nbsp;malloc -Wall malloc.c&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gcc -g -o&nbsp;&nbsp;fork -Wall fork.c&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gcc -g -o&nbsp;&nbsp;forkn -Wall forkn.c&nbsp;&nbsp;<br/>clean:&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rm -rf malloc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rm -rf fork<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rm -rf forkn<br/><br/>查看内存：<br/>ps -o &#039;pid,ppid,sz,vsz,rss,cmd&#039; -C&nbsp;&nbsp;forkn<br/><br/>=============================================================================<br/>linux中fork同时创建多个子进程的方法<br/><br/>正确的使用Linux中的用fork()由一个父进程创建同时多个子进程 的格式如下：<br/>int status,i;<br/>for (i = 0; i &lt; 10; i++)<br/>&#123;<br/>&nbsp;&nbsp;status = fork();<br/>&nbsp;&nbsp;if (status == 0 &#124;&#124; status == -1) break;//每次循环时，如果发现是子进程就直接从创建子进程的循环中跳出来，不让你进入循环，这样就保证了每次只有父进程来做循环创建子进程的工作<br/>&#125;<br/>if (status == -1)<br/>&#123;<br/>&nbsp;&nbsp;//error<br/>&#125;<br/>else if (status == 0) //每个子进程都会执行的代码<br/>&#123;<br/>&nbsp;&nbsp;//sub process<br/>&#125;<br/>else<br/>&#123;<br/>&nbsp;&nbsp;//parent process<br/>&#125;<br/>来自：http://blog.sina.com.cn/s/blog_605f5b4f0100x444.html
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [实践OK]linux中fork同时创建多个子进程的方法]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>