我已经被困在这几天了。我必须使用fork()函数编写以下树结构。有什么建议吗?这就是我到目前为止所知道的:
代码:
#include <stdio.h>
#include <stdlib.h>
main ()
{
int pid;
pid = fork();
//Child
if (pid == 0){
if ((pid = fork()) == 0)
{
printf("GrandChild: child pid = % d, my pid = %d, parent pid = %d \n",
pid, getpid(), getppid());
}
}
exit(0); }树形结构:
A
B C
D E F发布于 2014-03-10 11:37:50
下面的代码应该会创建所需的树结构。每个进程派生其子进程,运行一些所需的代码,然后等待任何/所有子进程完成运行:
#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。
https://stackoverflow.com/questions/22211321
复制相似问题