下面的代碼應該創建所需的樹形結構。每個進程叉及其子女,運行一些需要的代碼,然後等待任何/所有子進程完成運行:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#define printPID printf("my pid = %d, parent pid = %d\n", getpid(), getppid());
void fork_error() {
perror("Failed to fork.");
exit(1);
}
void fork_child(void (*f)()) {
int pid;
if ((pid = fork()) == 0) {
f();
wait(NULL);
exit(0);
} else if (pid < 0) {
fork_error();
}
}
/* Function prototypes */
void A(), B(), C(), D(), E(), F();
void A() {
fork_child(B);
fork_child(C);
/* Code for A goes here */
printPID;
wait(NULL);
}
void E() {
/* Code for E goes here */
printPID;
}
void F() {
/* Code for F goes here */
printPID;
}
void C() {
fork_child(E);
fork_child(F);
/* Code for C goes here */
printPID;
}
void D() {
/* Code for D goes here */
printPID;
}
void B() {
fork_child(D);
/* Code for B goes here */
printPID;
}
int main(int argc, char *argv[]) {
A();
return 0;
}
輸出示例:
$ ./a.out
my pid = 17365, parent pid = 14178
my pid = 17366, parent pid = 17365
my pid = 17369, parent pid = 17367
my pid = 17368, parent pid = 17366
my pid = 17367, parent pid = 17365
my pid = 17370, parent pid = 17367
如果您還需要在每一個孩子的PID節點/進程,然後fork_child()返回一個包含子PID的int值。
你到目前爲止設法編寫了什麼? – this
對不起,我很匆忙。我現在添加了代碼。 – user3369362
請花時間並正確設置您的代碼的格式。 –