美文网首页
linux中fork()函数详解 (阅读笔记)

linux中fork()函数详解 (阅读笔记)

作者: 麦芽de忧伤 | 来源:发表于2019-06-02 11:23 被阅读0次

    linux中fork()函数详解(转载)

    一、fork入门知识
    • 在Linux中fork函数是非常重要的函数,它的作用是从已经存在的进程中创建一个子进程,而原进程称为父进程。
    • 一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程。
    • 也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。
    #include <unistd.h>  
    #include <stdio.h>   
    int main ()   
    {   
        pid_t fpid; //fpid表示fork函数返回的值  
        int count=0;
        printf("当前进程id:  %d\n", getpid());
        fpid=fork();
    
        if (fpid < 0) {
            printf("error in fork!");
        } else if (fpid == 0) {
            printf("我是子进程 , 我的进程id: %d , 我的子进程id: %d\n", getpid(), fpid);
            count++;
        } else {
            printf("我是父进程 , 我的进程id: %d , 我的子进程id: %d\n", getpid(), fpid);
            count++;
        }
    
        printf("统计结果是: %d\n",count);
        return 0;  
    }  
    
    运行
    
    结果:
    当前进程id:  16948
    我是父进程 , 我的进程id: 16948 , 我的子进程id: 16949
    统计结果是: 1
    我是子进程 , 我的进程id: 16949 , 我的子进程id: 0
    统计结果是: 1
    
    fork 被调用一次,能够返回两次,它有三种不同的返回值:
    • 在父进程中,fork返回新创建子进程的进程ID;
    • 在子进程中,fork返回0;
    • 如果出现错误,fork返回一个负值;
    fokr调用失败的原因
    • 当前的进程数已经达到了系统规定的上限,这时errno的值被设置为EAGAIN
    • 系统内存不足,这时errno的值被设置为ENOMEM。
    fork执行完毕后,出现两个进程,fork只拷贝下一个要执行的代码到新的进程,用户态拷贝。
         父进程(第一次fock)
             /  \
    父进程(相同)  子进程(相同)
          .....
    

    相关文章

      网友评论

          本文标题:linux中fork()函数详解 (阅读笔记)

          本文链接:https://www.haomeiwen.com/subject/ycngtctx.html