我尝试创建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());
}
另外,我想稍后添加与管道的进程间通信。如果我以这种方式实现流程,这可能吗?有更好的解决办法吗?
最佳答案
你只等一个孩子,你可能想叫等每个孩子。
关于c - parent 不创造 child ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10667350/