【问题标题】:Use loop to fork varying number of children使用循环来分叉不同数量的孩子
【发布时间】:2013-11-18 14:41:23
【问题描述】:

我遇到的大多数示例都展示了如何分叉,比如这个:

main()
{
    int    pid;

    pid = fork();
    // child
    if (pid == 0)                
    {
        ...
    }
    // Parent
    else if (pID > 0)            
    {
        ...
    }

}

有些展示了如何分叉 2 个孩子,就像这样

pid = fork();
// Child
if ( pid==0 )
{
   ...
}

// Parent
else if ( pid>0 )
{
   pid=fork();

   // Second child
   if ( pid==0 ){
      ...
   }

}

这是我分叉 5 个孩子的尝试......

pid = fork();
// Child
if ( pid==0 )
{
   ...
}

// Parent
else if ( pid>0 )
{
   pid=fork();

   // Second child
   if ( pid==0 ){
      ...
   }

   // Parent
   else if ( pid>0 )
   {
      pid=fork();

      // Third child
      if ( pid==0 ){
         ...
      }
      // Parent
      else if ( pid>0 )
      {
         pid=fork();

         // Fourth child
         if ( pid==0 ){
            ...
         }
         // Parent
         else if ( pid>0 )
         {
            pid=fork();

            // Fifth child
            if ( pid==0 ){
               ...
            }
         }
      }
   }
}

问题:

我的意思是,这太疯狂了。是否有更简洁的方法来循环并创建不同数量的子项(即通过命令行参数指定)?

注意: 让孩子们区分开来(即写“嗨,我是 6 号孩子”......)至关重要,因为我的工作涉及每个进程向不同的计算机发出信号。目前,我正在使用信号量和一组目标计算机这样做。我宁愿为进程增加 1..N 的指数。

【问题讨论】:

    标签: c multiprocessing fork


    【解决方案1】:

    使用 for 循环。每个进程都会得到它自己的循环变量副本。

    int pid;
    int numKids = 5;
    int procNum;
    
    for(procNum = 0; procNum < numKids; procNum++) {
        // Note: haven't included error handling...
        pid = fork();
        if (pid == 0) {
            break;
        }
    }
    
    if (pid == 0) {
        // child specific stuff. procNum is set to the "child number"
    }
    else {
        // parent stuff
    }
    

    【讨论】:

    • 无论出于何种原因,我认为for 循环的变量会被重置
    • 不,每个孩子都会得到自己的副本,所以你需要确保孩子们打破循环,否则你最终会导致每个孩子产生更多孩子并重置pid,所以他们充当家长...
    猜你喜欢
    • 2017-07-19
    • 2013-08-08
    • 1970-01-01
    • 2013-10-22
    • 2015-05-02
    • 1970-01-01
    • 2011-12-13
    • 2020-03-13
    • 1970-01-01
    相关资源
    最近更新 更多