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

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)
         /  \
父进程(相同)  子进程(相同)
      .....
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容