歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux技術

linux新建進程

fork用於創建新進程,新進程與原進程具有從屬關系,原進程稱之為父進程,新建進程稱為子進程,此進程還有其他什麼關系呢?

1. 進程號

子進程的父進程應該為原進程,原進程的子進程應該為新建的進程號。

2. 返回值

使用fork新建進程返回值有三種,出錯返回-1,0返回給子進程 ,大於0的正整數返回給父進程。

3. 數據共享

子進程會復制父進程的所有數據,在fork進程之前是數據會被復制到子進程中,一般通過返回值來判斷子進程執行的內容。

[code] int main()
{
    pid_t pid;
    int i = 0;

    pid = fork();

    if (pid == -1) //創建失敗
    {
        printf("creat process error!\n");
        exit(1);
    } 
    else if (pid == 0) //子進程
    {
    printf("The child process ID is %d\n",getpid());
        i++;
    } 
    else // 父進程
    {
    printf("The father process ID is %d\n",getpid());
        i++;
    }
    printf("i = %d\n", i);
    return 0;
}
[code]首先看一下此程序段,按照常規的if...else...  的邏輯兩段代碼應該是矛盾的,不會同時執行,但是實際上卻同時執行了,那麼原因是什麼呢?原因在於上面的第2點,返回值的返回為0給子進程,大於0給父進程。由於在采用fork之後,有兩個進程同時執行,只不過在兩個進程中,子進程執行的是if內的內容,而父進程執行的是else的內容,執行的程序段不一樣而已,並不矛盾。

Copyright © Linux教程網 All Rights Reserved