zoukankan      html  css  js  c++  java
  • 使用fork循环创建子进程

    假设父进程为“阳澄湖大龙虾”,那么我接下来就创建5个子进程,分别为:

    皮皮虾1号;

    皮皮虾2号;

    皮皮虾3号;

    皮皮虾4号;

    皮皮虾5号;

    阳澄湖大龙虾这个主进程生了这么多个儿子以后,有点累,需要休息一下

     //Author:kunshanpipixia
     #include <stdio.h>
     #include <stdlib.h>
     #include <string.h>
     #include <pthread.h>
     #include <unistd.h>
     int main(void)
     {
         int i;
         pid_t pid = fork();
         for(i=1;i<=5;i++)
         {
             if(fork()==0)//注意此处不要写pid==0,要写成fork()==0;要不然只fork一个皮皮虾。
             {
                  break;
             }
         }
         if(pid==0)
         {
         printf("%s%d%s
    ","阳澄湖大龙虾生成了皮皮虾",i,"");
         }
         if(i==6&&pid>0)//此处条件限制了,只有父进程才能进入该循环。
         {
             sleep(1);//注意此处老父亲大龙虾要等皮皮虾1秒钟才执行下一步,你们可以去掉试试看是啥结果。
     
              printf("生完皮皮虾了,大龙虾的任务完成了
    ");
     
         }
             return 0;
     }

    最终输出如下:

     证明已经创建好了5个子进程。

    个人心得体会:

    1. 注意掌握好fork()的返回值。

    如果创建成功,子进程返回0,父进程返回子进程PID。

    如果失败,返回-1。

    2. 注意fork这个动作完成后,子进程和父进程一同执行以后的代码,这也是我没有将子进程的printf放到if循环里但是仍能打印出来5个子进程的原因。

    3. 如下图所示,每次执行一次,皮皮虾生出来的顺序都不一样。这和CPU内部的调度算法有关。

  • 相关阅读:
    MVC调用SVC无法找到资源解决问题
    动态更改iframe src
    http改成https wcf 配置更改
    Nuget 管理报repositories.config 访问路径被拒绝 解决办法
    如何在水晶报表中动态添加字段
    VS2.0控件之日历《Calendar》C#
    C#操作Excel全源码
    如何向水晶报表数据源中的存储过程传参数……
    公式的典型用途
    水晶报表公式使用必读
  • 原文地址:https://www.cnblogs.com/kunshanpipixia/p/13424184.html
Copyright © 2011-2022 走看看