使用1管道使用fork()设置四个进程

时间:2015-09-28 00:41:42

标签: c pipe fork

尝试编写一个使用管道/分叉创建/管理1个父进程和4个进程的简单程序。父进程应该显示如此的主菜单。

Main Menu:
1. Display children states
2. Kill a child
3. Signal a child
4. Reap a child
5. Kill and reap all children

我现在写的代码应该创建4个子进程。我不确定我是否正确设置了四个子进程。我理解fork将0返回给子节点,PID返回父节点。如何访问这些PID值的父级?我在哪里设置父进程的菜单?

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>

#define BUFSIZE 1024
#define KIDS    4
main()
{
    //create unnamed pipe
    int fd[2];
    char buf[BUFSIZE];

    if (pipe(fd) < 0) 
    {
        perror("pipe failed");
        exit (1);
    }

    //array of child pids
    size_t child_pid[4]; 

    //create 4 proccesses 
    int i = 0;
    for (i = 0; i < KIDS; i++) {
        child_pid[i] = fork();
        if (child_pid[i]) {
            continue;
        } else if (child_pid[i] == 0) {
            close(fd[0]);
            printf("Child %d: pid: %zu", i+1, child_pid[i]);
            break;
        } else {
            printf("fork error\n");
            exit(1);
        }

    } 

}

我的输出是:

Child 1: pid: 0
Child 2: pid: 0
Child 3: pid: 0
Child 4: pid: 0

1 个答案:

答案 0 :(得分:0)

  

我不确定我是否正确设置了四个子进程。

是的,你不应该让孩子们突破他们的代码块,所以改变

            break;

            sleep(99);  // or whatever you want the child to do
            exit(0);
  

如何访问父...?

如果由于某种原因你需要它,那就是getppid()

  

我究竟在哪里设置父进程的菜单?

for结束前的main循环之后执行此操作,这是父级继续执行的位置。