分类: LINUX
2015-06-26 23:15:55
1.&amp;nbsp;&amp;nbsp; 进程:一个其中运行着一个或多个线程的地址空间和这些线程所需要的系统资源,也即正在运行的程序。&lt;br /&gt; <br /> <br /> 2.&amp;nbsp;&amp;nbsp;&amp;nbsp; 进程结构:进程标识符(PID),PID是进程表的索引,操作系统通过PID对进程管理,2~32768,数字1保留init进程,该进程负责管理其他进程,为祖先进程,其他系统进程或直接或间接由init进程启动。如其他子进程的父进程丢失,则自动移交到init。&lt;br /&gt;<br /> <br /> 3.&amp;nbsp;&amp;nbsp;&amp;nbsp; 查看进程:ps -ef&lt;br /&gt; <br /> <br /> 4.&amp;nbsp;&amp;nbsp;&amp;nbsp; 系统进程:ps ax&lt;br /&gt; &lt;br /&gt; 1.&amp;nbsp;&amp;nbsp;&amp;nbsp; 启动新进程:system函数,运行字符串参数形式传递的命令,并等待该命令完成 &lt;br /&gt; &lt;div&gt; &lt;div class="codeheads"&gt; &lt;p&gt; 点击(&lt;span style="cursor:pointer;color:red;" onclick="code_hide('code656')"&gt;此处&lt;/span&gt;)折叠或打开 &lt;/p&gt; &lt;/div&gt; &lt;div id="code656" class="codeText"&gt; &lt;ol style="margin:0 1px 0 0;padding:5px 0pt;" start="1" class="dp-css none_number"&gt; &lt;li&gt; &lt;span style="color:#000000;"&gt;1 #include&lt;span style="color:#0000CC;"&gt;&amp;lt;&lt;/span&gt;stdlib&lt;span style="color:#0000CC;"&gt;.&lt;/span&gt;h&lt;span style="color:#0000CC;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;/span&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;&amp;nbsp;2 #include&lt;span style="color:#0000CC;"&gt;&amp;lt;&lt;/span&gt;stdio&lt;span style="color:#0000CC;"&gt;.&lt;/span&gt;h&lt;span style="color:#0000CC;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;&amp;nbsp;3 &lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;&amp;nbsp;4 &lt;span style="color:#FF0000;"&gt;int&lt;/span&gt; main&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;&amp;nbsp;<br /> <br /> 5 &lt;span style="color:#0000CC;"&gt;{&lt;/span&gt; &lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;&amp;nbsp;<br /> <br /> 6 printf&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;&lt;span style="color:#FF00FF;"&gt;"Running ps with system\n"&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;&amp;nbsp;<br /> <br /> 7 system&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;&lt;span style="color:#FF00FF;"&gt;"ps ax"&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt; &lt;span style="color:#0000CC;"&gt;/&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;/&lt;/span&gt;程序必须等待system函数调用结束返回后,进程才能结束&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;&amp;nbsp;<br /> <br /> 8 &lt;span style="color:#0000CC;"&gt;/&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;/&lt;/span&gt; system&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;&lt;span style="color:#FF00FF;"&gt;"ps ax &amp;amp;"&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt; &lt;span style="color:#0000CC;"&gt;/&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;/&lt;/span&gt;为一个在在后台运行程序的请求,程序瞬间完成,再执行ps命令&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;&amp;nbsp;<br /> <br /> 9 printf&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;&lt;span style="color:#FF00FF;"&gt;"Done.\n"&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;<br /> <br /> 10 &lt;span style="color:#0000FF;"&gt;exit&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;0&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;<br /> <br /> 11 &lt;span style="color:#0000CC;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; 2.&amp;nbsp;&amp;nbsp;&amp;nbsp; 让进程同时执行多个函数:(1). 线程。(2). fork一个子进程,该进程与父进程基本同,但有自己的数据空间,环境和文件描述符。&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; 父进程的fork调用,返回新的子进程PID。子进程中fork调用返回0。可以此区分父子进程,fork失败,返回-1。&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; fork函数,以下程序,父进程在子进程之前结束了&lt;br /&gt; &lt;br /&gt; &lt;div&gt; &lt;div class="codeheads"&gt; &lt;p&gt; 点击(&lt;span style="cursor:pointer;color:red;" onclick="code_hide('code582')"&gt;此处&lt;/span&gt;)折叠或打开 &lt;/p&gt; &lt;/div&gt; &lt;div id="code582" class="codeText"&gt; &lt;ol style="margin:0 1px 0 0;padding:5px 0pt;" start="1" class="dp-css none_number"&gt; &lt;li&gt; &lt;span style="color:#000000;"&gt;1 #include&lt;span style="color:#0000CC;"&gt;&amp;lt;&lt;/span&gt;sys&lt;span style="color:#0000CC;"&gt;/&lt;/span&gt;types&lt;span style="color:#0000CC;"&gt;.&lt;/span&gt;h&lt;span style="color:#0000CC;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;/span&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;&amp;nbsp;2 #include&lt;span style="color:#0000CC;"&gt;&amp;lt;&lt;/span&gt;unistd&lt;span style="color:#0000CC;"&gt;.&lt;/span&gt;h&lt;span style="color:#0000CC;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;&amp;nbsp;3 #include&lt;span style="color:#0000CC;"&gt;&amp;lt;&lt;/span&gt;stdio&lt;span style="color:#0000CC;"&gt;.&lt;/span&gt;h&lt;span style="color:#0000CC;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;&amp;nbsp;4 #include&lt;span style="color:#0000CC;"&gt;&amp;lt;&lt;/span&gt;stdlib&lt;span style="color:#0000CC;"&gt;.&lt;/span&gt;h&lt;span style="color:#0000CC;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;&amp;nbsp;5 &lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;&amp;nbsp;6 &lt;span style="color:#FF0000;"&gt;int&lt;/span&gt; main&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;&amp;nbsp;7 &lt;span style="color:#0000CC;"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;&amp;nbsp;8 pid_t pid&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;&amp;nbsp;9 char &lt;span style="color:#0000CC;"&gt;*&lt;/span&gt;message&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;10 &lt;span style="color:#FF0000;"&gt;int&lt;/span&gt; n&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;11 &lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;12 printf&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;&lt;span style="color:#FF00FF;"&gt;"fork program starting\n"&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;13 pid &lt;span style="color:#0000CC;"&gt;=&lt;/span&gt; fork&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;14 switch&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;pid&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;15 &lt;span style="color:#0000CC;"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;16 &lt;span style="color:#0000FF;"&gt;case&lt;/span&gt; &lt;span style="color:#0000CC;"&gt;-&lt;/span&gt;1&lt;span style="color:#0000CC;"&gt;:&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;17 perror&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;&lt;span style="color:#FF00FF;"&gt;"fork failed"&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;18 &lt;span style="color:#0000FF;"&gt;exit&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;1&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;19 &lt;span style="color:#0000FF;"&gt;case&lt;/span&gt; 0&lt;span style="color:#0000CC;"&gt;:&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;20 message &lt;span style="color:#0000CC;"&gt;=&lt;/span&gt; &lt;span style="color:#FF00FF;"&gt;"This is child!"&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;21 n &lt;span style="color:#0000CC;"&gt;=&lt;/span&gt; 5&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;22 break&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;23 default&lt;span style="color:#0000CC;"&gt;:&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;24 message &lt;span style="color:#0000CC;"&gt;=&lt;/span&gt; &lt;span style="color:#FF00FF;"&gt;"This is parent"&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;25 n &lt;span style="color:#0000CC;"&gt;=&lt;/span&gt; 3&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;26 break&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;27 &lt;span style="color:#0000CC;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;28 &lt;span style="color:#0000FF;"&gt;for&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt; n &lt;span style="color:#0000CC;"&gt;&amp;gt;&lt;/span&gt; 0&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt; n&lt;span style="color:#0000CC;"&gt;-&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;-&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;29 &lt;span style="color:#0000CC;"&gt;{&lt;/span&gt; &lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;30 puts&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;message&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;31 sleep&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;1&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;32 &lt;span style="color:#0000CC;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;33 &lt;span style="color:#0000FF;"&gt;exit&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;0&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt; &lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;34 &lt;span style="color:#0000CC;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; 3.&amp;nbsp;&amp;nbsp;&amp;nbsp; 等待一个进程:利用wait(int *stat_loc)函数,暂停父进程,直到子进程结束,其中status保存被收集进程退出的状态,如对该子进程退出状态不关心,则参数可设为NULL,即wait(NULL)。&lt;br /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; 等待某个特定进程结束,用waitpid(pid_t pid, int *stat_loc, int options); pid等待子进程的PID。如值为-1,waitpid返回任一子进程信息。第二参数同wait函数。第三参数常为WNOHANG,防止waitpid调用将调用者的执行挂起,可用此检查是否有子进程结束,若无程序将继续执行。可用于父进程周期性检查特定子进程是否终止,waitpid(child_pid, (int*) 0, WNOHANG),如子进程没有结束或意外终止,返回0,否则返回child_pid。如waitpid失败,返回-1并设置errno。&lt;br /&gt; &lt;br /&gt; &lt;div&gt; &lt;div class="codeheads"&gt; &lt;p&gt; 点击(&lt;span style="cursor:pointer;color:red;" onclick="code_hide('code633')"&gt;此处&lt;/span&gt;)折叠或打开 &lt;/p&gt; &lt;/div&gt; &lt;div id="code633" class="codeText"&gt; &lt;ol style="margin:0 1px 0 0;padding:5px 0pt;" start="1" class="dp-css none_number"&gt; &lt;li&gt; &lt;span style="color:#000000;"&gt;1 #include&lt;span style="color:#0000CC;"&gt;&amp;lt;&lt;/span&gt;sys&lt;span style="color:#0000CC;"&gt;/&lt;/span&gt;types&lt;span style="color:#0000CC;"&gt;.&lt;/span&gt;h&lt;span style="color:#0000CC;"&gt;&amp;gt;&lt;/span&gt; &lt;br /&gt; &lt;/span&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;&amp;nbsp;2 #include&lt;span style="color:#0000CC;"&gt;&amp;lt;&lt;/span&gt;sys&lt;span style="color:#0000CC;"&gt;/&lt;/span&gt;wait&lt;span style="color:#0000CC;"&gt;.&lt;/span&gt;h&lt;span style="color:#0000CC;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;&amp;nbsp;3 #include&lt;span style="color:#0000CC;"&gt;&amp;lt;&lt;/span&gt;unistd&lt;span style="color:#0000CC;"&gt;.&lt;/span&gt;h&lt;span style="color:#0000CC;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;&amp;nbsp;4 #include&lt;span style="color:#0000CC;"&gt;&amp;lt;&lt;/span&gt;stdio&lt;span style="color:#0000CC;"&gt;.&lt;/span&gt;h&lt;span style="color:#0000CC;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;&amp;nbsp;5 #include&lt;span style="color:#0000CC;"&gt;&amp;lt;&lt;/span&gt;stdlib&lt;span style="color:#0000CC;"&gt;.&lt;/span&gt;h&lt;span style="color:#0000CC;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;&amp;nbsp;6 &lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;&amp;nbsp;7 &lt;span style="color:#FF0000;"&gt;int&lt;/span&gt; main&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;&amp;nbsp;8 &lt;span style="color:#0000CC;"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;&amp;nbsp;9 pid_t pid&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;10 char &lt;span style="color:#0000CC;"&gt;*&lt;/span&gt;message&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;11 &lt;span style="color:#FF0000;"&gt;int&lt;/span&gt; n&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;12 &lt;span style="color:#FF0000;"&gt;int&lt;/span&gt; exit_code&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;13 &lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;14 printf&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;&lt;span style="color:#FF00FF;"&gt;"fork program starting\n"&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;15 pid &lt;span style="color:#0000CC;"&gt;=&lt;/span&gt; fork&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;16 switch&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;pid&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;17 &lt;span style="color:#0000CC;"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;18 &lt;span style="color:#0000FF;"&gt;case&lt;/span&gt; &lt;span style="color:#0000CC;"&gt;-&lt;/span&gt;1&lt;span style="color:#0000CC;"&gt;:&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;19 perror&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;&lt;span style="color:#FF00FF;"&gt;"fork failed"&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;20 &lt;span style="color:#0000FF;"&gt;exit&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;1&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;21 &lt;span style="color:#0000FF;"&gt;case&lt;/span&gt; 0&lt;span style="color:#0000CC;"&gt;:&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;22 message &lt;span style="color:#0000CC;"&gt;=&lt;/span&gt; &lt;span style="color:#FF00FF;"&gt;"This is the child"&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;23 n &lt;span style="color:#0000CC;"&gt;=&lt;/span&gt; 5&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt; &lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;24 exit_code &lt;span style="color:#0000CC;"&gt;=&lt;/span&gt; 37&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;25 break&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;26 default&lt;span style="color:#0000CC;"&gt;:&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;27 message &lt;span style="color:#0000CC;"&gt;=&lt;/span&gt; &lt;span style="color:#FF00FF;"&gt;"This is the parent"&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;28 n &lt;span style="color:#0000CC;"&gt;=&lt;/span&gt; 3&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;29 exit_code &lt;span style="color:#0000CC;"&gt;=&lt;/span&gt; 0&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;30 break&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;31 &lt;span style="color:#0000CC;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &lt;span style="color:#0000CC;"&gt;&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;&lt;/span&gt;&amp;nbsp; 32 &lt;span style="color:#0000FF;"&gt;for&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt; n &lt;span style="color:#0000CC;"&gt;&amp;gt;&lt;/span&gt; 0&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;n&lt;span style="color:#0000CC;"&gt;-&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;-&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;33 &lt;span style="color:#0000CC;"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;34 puts&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;message&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;35 sleep&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;1&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;36 &lt;span style="color:#0000CC;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;37 #&lt;span style="color:#0000FF;"&gt;if&lt;/span&gt; 1 &lt;span style="color:#0000CC;"&gt;/&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;/&lt;/span&gt;等待子进程完成&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;38 &lt;span style="color:#0000FF;"&gt;if&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;pid &lt;span style="color:#0000CC;"&gt;!&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;=&lt;/span&gt; 0&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;39 &lt;span style="color:#0000CC;"&gt;{&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;40 &lt;span style="color:#FF0000;"&gt;int&lt;/span&gt; stat_val&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;41 pid_t child_pid&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;42 &lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;43 child_pid &lt;span style="color:#0000CC;"&gt;=&lt;/span&gt; wait&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;&amp;amp;&lt;/span&gt;stat_val&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;44 &lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;45 printf&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;&lt;span style="color:#FF00FF;"&gt;"Child has finished: PID = %d\n"&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;,&lt;/span&gt; child_pid&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;46 &lt;span style="color:#0000FF;"&gt;if&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;WIFEXITED&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;stat_val&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;/&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;/&lt;/span&gt;子进程正常结束,取非零值,&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;47 printf&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;&lt;span style="color:#FF00FF;"&gt;"Child exited with code %d\n"&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;,&lt;/span&gt; WEXITSTATUS&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;stat_val&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;/&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;/&lt;/span&gt;WIFEXITED非0,返回子进程退出码&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;48 &lt;span style="color:#0000FF;"&gt;else&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;49 printf&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;&lt;span style="color:#FF00FF;"&gt;"Child terminated abnormally\n"&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;50 &lt;span style="color:#0000CC;"&gt;}&lt;/span&gt;&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;51 #endif&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;52 &lt;span style="color:#0000FF;"&gt;exit&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;exit_code&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;;&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;/&lt;/span&gt;&lt;span style="color:#0000CC;"&gt;/&lt;/span&gt;子进程先结束的退出码,如无此,则默认退出码为0,也即WEXITEDSTATUS&lt;span style="color:#0000CC;"&gt;(&lt;/span&gt;stat_val&lt;span style="color:#0000CC;"&gt;)&lt;/span&gt;的返回值为0&lt;br /&gt; &lt;/li&gt; &lt;li&gt; &amp;nbsp;53 &lt;span style="color:#0000CC;"&gt;}&lt;/span&gt; &lt;br /&gt; &lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; 4.&amp;nbsp;&amp;nbsp;&amp;nbsp; 僵尸进程:子进程终止时,与父进程关联还会保持,直到父进程正常终止或者调用wait才结束,而在此之前,其将成为一个死进程或者僵尸进程。例如可将上面的代码中的n对应的子进程大于父进程,子进程结束时,ps -al即可显示Z,&lt;br /&gt;<br /> <br /> 负担的萨芬但是阿斯顿发大水