Linux進程式控制制編程之fork、wait

來源:互聯網
上載者:User

本文將記錄我在學習fork和wait(waitpid)這兩個函數的過程。

 

1.fork

在linux中,建立一個新進程常用fork函數,它非常特別,執行一次,居然返回兩個值,這與一般的函數是大大的不一樣的,這點引起了我高度的注意。

 

prototype: pid_t fork(void)

return: 0 ——子進程

          >0(即子進程ID)——父進程

          -1 ——出錯

 

接下來繼續介紹wait函數,最後再給出常式實踐。

 

2.wait

wait函數用於使父進程阻塞,直到一個子進程結束或者進程接到了一個指定的訊號為止。若父進程沒有子進程或者子進程已結束,則wait就會立即返回。

 

prototype : pid_t wait(int *status)

parameter: status是該子進程退出時的狀態,若為NULL,則代表任意狀態結束子進程。若不為空白,則代表指定狀態結束子進程。

return : 子進程id號 —— success

            -1 —— failure

 

fork和wait的使用範例如下

#include <sys/types.h><br />#include <sys/wait.h><br />#include <unistd.h><br />#include <stdlib.h></p><p>int main(void)<br />{<br /> pid_t pc, pr;</p><p> pc = fork();<br /> if (0 == pc) //進入子進程<br /> {<br /> printf("i`m child process with pid of %d/n", getpid());<br /> sleep(10); //睡眠10s<br /> }<br /> else if (pc > 0) //進入父進程<br /> {<br /> pr = wait(NULL); //等待子進程結束,並取得子進程id<br /> printf("i catch child process with pid of %d/n", pr);<br /> }</p><p> return 0;<br />}

 

 

程式解釋:pc = fork();這一句建立了一個新的子進程,根據返回的值來進行判斷將要執行的是父進程還是子進程。fork()與vfork()不一樣,建立子進程之後,接著調用的是父進程還是子進程是隨機的,具體關於fork和vfork的介紹請看http://blog.csdn.net/jarvis_xian/archive/2011/05/11/6412658.aspx

既然執行父進程或者子進程的先後是隨機的,那上述常式分兩種情況論述。

1.先執行子進程

   程式自上而下運行,子進程列印語句後,睡眠10s,父進程接管,等待子進程結束(睡眠結束即子進程結束),擷取結束的子進程的pid,接著列印出來。

2.先執行父進程

   父進程一開始就執行wait函數,因為子進程還沒有結束(甚至還沒有開始,但是已經存在的),所以父進程在一個阻塞的狀態,既然父進程阻塞了,那就轉向執行子進程了,接下來的過程就跟第一種情況一樣了。

 

大家可以嘗試編譯、運行上述程式,看看效果,這對於fork和wait的作用就一目瞭然了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.