【问题标题】:Create a chain of N processes where parent creates one child创建一系列 N 个进程,其中父进程创建一个子进程
【发布时间】:2017-08-02 04:18:01
【问题描述】:

我必须创建四个进程,每个儿子都必须创建一个儿子,然后等待它完成。

PROCESS 0 --> PROCESS 1 --> PROCESS 2 --> PROCESS 3 --> PROCESS 4

怎么做?到目前为止,我已经尝试了以下方法:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <errno.h>
#include <fcntl.h> 
#define NUM_PROC 5


int main (void)
{
    int pid;
    int i;
    int status;
    for (i=0; i < NUM_PROC; i++)
    {
        if ((pid=fork()) <0 )
        {
            printf("Error in forking\n");
            exit(EXIT_FAILURE);
        } else if (pid ==0) {
            printf("Sono: %d, mio padre e: %d\n", getpid(), getppid());     
            pid = fork();
        }
        else {
            printf("Sono: %d, mio padre e: %d\n", getpid(), getppid());   
            wait( &status);
        }
    }
    exit(EXIT_SUCCESS);
}

【问题讨论】:

  • 所以你想让人们做你的工作?当执行顺序为单次执行时,拥有多个进程的想法是什么。只会增加创建进程的开销...
  • Nono 我不想让别人做我的工作,我必须做它来锻炼身体,我只是找不到可能的想法,我正在尝试很多,但我可以' t 管理做任何类似的事情
  • 您能详细说明您需要帮助的部分吗? (你了解如何创建流程吗?你了解如何等待流程吗?你了解如何数到四吗?你了解如何结合这三种能力吗?)
  • 是的,我会做的,我会把我做过的事情写出来
  • 使用fork()系统调用创建一个进程非常简单。看看fork() 做了什么,它是parent\son 进程的返回值。

标签: c process operating-system fork


【解决方案1】:

主程序正在循环中创建一个新的子进程,然后它运行与父进程相同的循环并创建更多子进程。

使用for 循环并泛化N 进程:

for (int i=0; i<N; i++) 
{
    pid = fork();
    if (pid == -1) { // handle error }
    else if (pid == 0) {
        // son process (NO FORK INSIDE THIS ELSE IF!)
    }
    else { // parent process
        wait(NULL);
        exit(0);
    }
}

【讨论】:

  • 非常感谢您的帮助。为了获得更“便携”的东西,这将是一种在 for 循环中执行此操作的方法吗?在任何情况下都非常感谢您
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-11
  • 2014-05-11
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 2023-04-04
相关资源
最近更新 更多