linux新建进程--fork

来源:互联网 发布:java搜索引擎lucene 编辑:程序博客网 时间:2024/06/10 03:15

fork用于创建新进程,新进程与原进程具有从属关系,原进程称之为父进程,新建进程称为子进程,此进程还有其他什么关系呢?
1. 进程号
子进程的父进程应该为原进程,原进程的子进程应该为新建的进程号。
2. 返回值
使用fork新建进程返回值有三种,出错返回-1,0返回给子进程 ,大于0的正整数返回给父进程。
3. 数据共享
子进程会复制父进程的所有数据,在fork进程之前是数据会被复制到子进程中,一般通过返回值来判断子进程执行的内容。

 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;}   
首先看一下此程序段,按照常规的if...else...  的逻辑两段代码应该是矛盾的,不会同时执行,但是实际上却同时执行了,那么原因是什么呢?原因在于上面的第2点,返回值的返回为0给子进程,大于0给父进程。由于在采用fork之后,有两个进程同时执行,只不过在两个进程中,子进程执行的是if内的内容,而父进程执行的是else的内容,执行的程序段不一样而已,并不矛盾。
0 0
原创粉丝点击