linux新建进程--fork

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/cole10540316/article/details/51483903

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的内容,执行的程序段不一样而已,并不矛盾。
展开阅读全文

没有更多推荐了,返回首页