linux下的進程(1)

linux下建立新的進程
進程時每個系統下必不可少的一個部分。每個進程都有一個非負證整數的惟一進程ID。進程ID標識符老是惟一的。通常在linux建立一個進程是同fork()函數的。linux

函數fork()的原型函數

pid_t fork(void)

這個函數的主要主要特點是返回兩次值,子進程返回0,父進程返回子進程ID。出錯則返回-1。經過實例來了解一下這個函數。spa

#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>   
#include <unistd.h>

int main(void)
{
    pid_t pid;
    int globalx = 2;
    if ((pid = fork()) > 0){
        int a = 1;
        printf("parent is %d \n",a)
    }
    else if (pid == 0) {
        int a = 1;
        a++;
        printf("child is %d \n",a);
    }
    else {
        printf("error");
    }
    printf("all have: %d \n",globalx);
    exit(0);
}

運行的結果以下
圖片描述code

由這個例子的看的出來,他們惟一的區別只是在pid>0下的代碼和pid==0下的的代碼。fork()以後父函數和子函數實現不一樣的代碼段,並且相互之間並不影響。
咱們在再看下一個例子。進程

#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>   
#include <unistd.h>

int main(void)
{
    pid_t pid;
    int globalx = 2;
    if ((pid = fork()) > 0){
        int a = 1;
        for(int i=0;i<10;i++)
            printf("parent is %d \n",a);
    }
    else if (pid == 0) {
        int a = 1;
        a++;
        for(int i=0;i<10;i++)   
            printf("child is %d \n",a);
    }
    else {
        printf("error");
    }
    printf("all have: %d \n",globalx);
    exit(0);
}

運行的結果以下
圖片描述圖片

當咱們在那兩個代碼塊加入循環時,就能夠發現子進程和父進程,能夠說時各自獨立的,它們之間沒有前後關係。若是子進場和父進程同時對一個文件進行操做,則須要考慮到這一點。原型

以上基本上是fork()函數兩大特色。若是有錯誤和遺漏的地方,歡迎指出和補充。it

相關文章
相關標籤/搜索