仅在C中使用父级进行fork多进程

时间:2015-06-22 20:55:41

标签: c multiprocessing fork

我有一个项目,我必须从一个父进程中分叉A B C和D进程,这是原始程序/ main()函数。我使用管道在进程之间进行通信,并且我经历了大量编码,但是我无法在进程之间发送正确的消息。但是,我决定回去理解fork()的基本概念,所以我编写了以下代码。

------已编辑:我的问题是我可以使用此模板通过所有4个进程的管道发送消息并从父进程读取这些消息吗?如果是这样,我必须在哪个父节中写下阅读代码? `

if (fork()) { //parent log
    printf("Inside parent\n");

    if (fork()) { //parent log
        printf("Inside parent\n");

        if (fork()) { //parent log
            printf("Inside parent\n");

            if (fork()) { //parent log
                printf("Inside parent\n");

            }else { //child process D
                printf("Inside process D\n");
                _exit(1);
            }

        }else { //child process C
            printf("Inside process C\n");
            _exit(1);
        }

    }else { //child process B
        printf("Inside process B\n");
        _exit(1);
    }
}else { //child process A
    printf("Inside process A\n");
    _exit(1);
}

我的目标是将消息从A发送到B,从B发送到C,从B发送到D,同时将消息从任何进程(A B C和D)发送到父进程。 这个代码模板是否正确?或者它的结构有问题? 非常感谢。

1 个答案:

答案 0 :(得分:2)

虽然您的代码确实创建了4个子进程,但它可以简单得多:

int main()
{
  int i;
  for(i = 0; i < 4; i++) {
    printf("getpid = 0x%X\n", getpid());
    if(fork()) {
      printf("Inside parent\n");
    }
    else {
      printf("Inside process %c\n", 'A'+i);
      exit(1);
    }
  }
}

关键的想法是,您可以通过i的值来区分每个孩子。您甚至可以在i声明中使用switch

int main()
{
  int i;
  for(i = 0; i < 4; i++) {
    printf("getpid = 0x%X\n", getpid());
    if(fork()) {
      printf("Inside parent\n");
    }
    else {
      switch(i) {
      case 0:
        printf("In process A\n");
        break;
      case 1:
        printf("In process B\n");
        break;
      case 2:
        printf("In process C\n");
        break;
      case 3:
        printf("In process D\n");
        break;
      }
      exit(1);
    }
  }
}