c語言fork 多進程



fork函數的作用

一個進程,包括代碼、數據和分配給進程的資源。fork()函數通過系統調用創建一個與原來進程幾乎完全相同的進程,也就是兩個進程可以做完全相同的事,但如果初始參數或者傳入的變量不同,兩個進程也可以做不同的事。
一個進程調用fork()函數后,系統先給新的進程分配資源,例如存儲數據和代碼的空間。然后把原來的進程的所有值都復制到新的新進程中,只有少數值與原來的進程的值不同。相當於克隆了一個自己。

 

fork出錯可能有兩種原因
1)當前的進程數已經達到了系統規定的上限,這時errno的值被設置為EAGAIN。
2)系統內存不足,這時errno的值被設置為ENOMEM。
創建新進程成功后,系統中出現兩個基本完全相同的進程,這兩個進程執行沒有固定的先后順序,哪個進程先執行要看系統的進程調度策略。

 

root@localhost:~# vi fork_test.c
#include <unistd.h>
#include <stdio.h>

int main()
{
        pid_t fpid;
        int count = 0 ;

        printf("start \n");

        fpid = fork();

        printf("fork \n");

        if(fpid<0)
        {
                printf("error in fork! \n");
        }
        else if (fpid==0)
        {
                printf("child process %d \n",getpid());
                count ++;
        }
        else
        {
                printf("parent process %d \n",getpid());
                count ++;
        }
        printf("統計結果是:%d \n",count);
        return 0 ;
}
root@localhost:~# gcc fork_test.c  -o fork_test
root@localhost:~# ./fork_test 

輸出結果如下:

start 
fork 
parent process 1579 
統計結果是:1 
root@localhost:~# fork 
child process 1580 
統計結果是:1

總結: fork函數 會創建一個新進程,pid為0時是子進程 ,pid 不為零時是父進程。 

子進程執行是從fork開始執行的。fork之前的,不用再次執行。

 

參考文檔:http://www.cnblogs.com/jeakon/archive/2012/05/26/2816828.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM