父母不创造孩子?

时间:2012-05-19 17:20:11

标签: c process fork function-pointers

我尝试创建4个同时工作的子进程,但我的程序输出非常随机:有时没有创建其中一个进程(不执行printf语句)。我无法理解这个的原因,因为当我在父母中使用wait()函数时,它应该等待它的孩子完成吗?这是我的代码:

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

#define NR_OF_PROCESSES 4

void readProcess(void);
void tokenProcess(void);
void calculatorProcess(void);
void errorProcess(void);

void (*functionTable[NR_OF_PROCESSES]) (void) = {readProcess, tokenProcess, calculatorProcess, errorProcess};

int main(void) {

    int i;
    int status;
    for (i = 0; i < NR_OF_PROCESSES; i++) {

        int pid = fork();
        if (pid < 0) {
            perror("could not fork");
            return 0;
        }
        if (pid == 0) {
            functionTable[i]();
            exit(0);
        }
    }

    printf("parent is waiting");
    wait(status);

    return (0);
}

void readProcess(void) {
    printf("readprocess running, PID=%d, PPID=%d\n",getpid(),getppid());
}

void tokenProcess(void) {
    printf("tokenprocess running, PID=%d, PPID=%d\n",getpid(),getppid());
}

void calculatorProcess(void) {
    printf("calculatorprocess running, PID=%d, PPID=%d\n",getpid(),getppid());
}

void errorProcess(void) {
    printf("errorprocess running, PID=%d, PPID=%d\n",getpid(),getppid());
}

此外,我想稍后添加与管道的进程间通信。如果我以这种方式实现流程,这是否可行?有更好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

你只等一个孩子,你可能想等待每个孩子。