• 【Linux】进程概念 —— fork函数


    目录

    一.概念

    二.解释

    1.现象与原理

    2.fork函数的用法

    3.fork函数为什么会有两个返回值

    4.扩展问题


    一.概念

    本质:fork函数是一个system call,也就是系统调用

    作用:创建子进程

    参数:无参

    返回值

            1.类型是pid_t,本质就是int类型

            2.创建失败:返回-1;

               创建成功:有两个返回值,给父进程返回子进程的pid,给子进程返回0

    包含头文件:unistd.h

    二.解释

    1.现象与原理

    2.fork函数的用法

    1. #include
    2. #include
    3. #include
    4. int main()
    5. {
    6. pid_t id = fork();
    7. if(id < 0)//fork创建子进程失败
    8. {
    9. perror("fork");//打印错误信息
    10. exit(0);//结束进程
    11. }
    12. else if(id == 0)//执行子进程代码
    13. {
    14. //...
    15. //例如
    16. while(1)
    17. {
    18. printf("This is Son Process, ret:%d, pid:%d, ppid:%d\n",id,getpid(),getppid());
    19. sleep(1);
    20. }
    21. }
    22. else//执行父进程代码
    23. {
    24. //...
    25. //例如
    26. while(1)
    27. {
    28. printf("This is Parent Process, ret:%d, pid:%d, ppid:%d\n",id,getpid(),getppid());
    29. sleep(1);
    30. }
    31. }
    32. return 0;
    33. }

    可以看到else if 与 else的代码同时执行了!

    两个while死循环同时执行了!!

    为什么会这样?

    就是因为这是两个进程,两个共享fork之后的代码,但独立运行,互不干扰

    此外,这里在实际应用中就用fork返回值id分别让父子进程执行不同的代码

    但是有人问父子进程代码在fork之后不是共享的吗?

    答:是共享的,共享与能执行是两回事,父子进程彼此能看到对方的代码,但是能执行的代码被返回值分开了

    3.fork函数为什么会有两个返回值

    为什么给子进程返回0,为什么给父进程返回子进程的pid?

    答:每个父亲可以有多个孩子,但每个孩子只会有一个父亲,所以父亲需要给孩子起名字来标识这个孩子

    为什么fork函数有两个返回值,难道之前学的函数只有一个返回值不对吗?

    答:函数有且仅有一个返回值,这一结论是肯定的!

    那么为什么fork有两个返回值?

    当前阶段,只能先简单认识一下。

    但是这里有遗留问题!!!

    返回两次,不代表会被记录两次,同一个变量:id,怎么会能同时记录两个数据呢?

    这个问题在后面的博客中会给出解释,目前为止理解到这里就可以了

    4.扩展问题

    fork一次,创建一个子进程,一共有两个进程

    那么fork两次,fork三次,fork四次,一共有多少个进程??

    对于这个问题,先画出一张图,就可以很容易的解释了。

    总结规律:n次fork一共会有2^n个进程

  • 相关阅读:
    第十九章 Nacos统一配置中心详解
    【自然语言处理(NLP)】基于循环神经网络实现情感分类
    分析问题难以决策,如何用一颗树来解决?
    基于FFmpeg的Android播放器
    log4j2同步日志引发的性能问题 | 京东物流技术团队
    java基础之浅聊线程池
    第九周内容回顾
    springboot集成mybatis步骤
    UE打包报错,出现这个是为啥啊打包错误找不到这个文件
    Unity 引擎中国版 “团结引擎” 发布
  • 原文地址:https://blog.csdn.net/Hello_World_213/article/details/126167600