Linux fork()傳回值說明

來源:互聯網
上載者:User

 

對於主進程 fork()返回建立的子進程ID, 子進程fork()返回0

 

http://blog.chinaunix.net/u1/53053/showart_425189.html

進程配置有唯一的進程式控制制塊PCB,由proc結構和usr結構組成。
下面依次介紹進程相關的系統調用:
1:fork()函數          建立一個子進程

 #include<sys/types.h> /* 提供類型pid_t的定義 */#include<unistd.h> /* 提供函數的定義 */pid_t fork(void);

只看fork的名字,可能難得有幾個人可以猜到它是做什麼用的。fork系統調用的作用是複製一個進程。當一個進程調用它,完成後就出現兩個幾乎一模一樣的進程,我們也由此得到了一個新進程。據說fork的名字就是來源於這個與叉子的形狀頗有幾分相似的工作流程。
在Linux 中,創造新進程的方法只有一個,就是我們正在介紹的fork。其他一些庫函數,如system(),看起來似乎它們也能建立新的進程,如果能看一下它們的源碼就會明白,它們實際上也在內部調用了fork。包括我們在命令列下運行應用程式,新的進程也是由shell調用fork製造出來的。fork有一些很有意思的特徵,下面就讓我們通過一個小程式來對它有更多的瞭解。

/* fork_test.c */#include<sys/types.h>#inlcude<unistd.h>main(){pid_t pid; /*此時僅有一個進程*/pid=fork();/*此時已經有兩個進程在同時運行*/if(pid<0)printf("error in fork!");else if(pid==0)printf("I am the child process, my process ID is %d/n",getpid());elseprintf("I am the parent process, my process ID is %d/n",getpid());}

編譯並運行:

$gcc fork_test.c -o fork_test$./fork_testI am the parent process, my process ID is 1991I am the child process, my process ID is 1992

看這個程式的時候,頭腦中必須首先瞭解一個概念:在語句pid=fork()之前,只有一個進程在執行這段代碼,但在這條語句之後,就變成兩個進程在執行了,這兩個進程的代碼部分完全相同,將要執行的下一條語句都是if(pid==0)……。

兩個進程中,原先就存在的那個被稱作“父進程”,新出現的那個被稱作“子進程”。父子進程的區別除了進程標誌符(process ID)不同外,變數pid的值也不相同,pid存放的是fork的傳回值。fork調用的一個奇妙之處就是它僅僅被調用一次,卻能夠返回兩次,它可能有三種不同的傳回值:

  1. 在父進程中,fork返回新建立子進程的進程ID;
  2. 在子進程中,fork返回0;
  3. 如果出現錯誤,fork返回一個負值;

fork出錯可能有兩種原因:(1)當前的進程數已經達到了系統規定的上限,這時errno的值被設定為EAGAIN。(2)系統記憶體不足,這時errno的值被設定為ENOMEM。(關於errno的意義,請參考本系列的第一篇文章。)

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.