论成功
fork()
两次返回给具有子进程id的父进程,一次返回给值为0的子进程。最简单的方法是生成跟踪,其中包括父级的进程id和每个输出的当前进程id:
#include <stdio.h>
#include <unistd.h>
void print(const char *s) {
printf("parent: %ld, current: %ld %s\n", (long) getppid(), (long) getpid(), s);
}
int main(void) {
if (!fork())
print("Alpha");
if (!fork()) {
print("Beta");
return 0;
}
print("Omega");
}
以及示例输出:
parent: 1217505, current: 1218158 Omega
parent: 1218158, current: 1218159 Alpha
parent: 1218158, current: 1218160 Beta
parent: 1218158, current: 1218159 Omega
parent: 1218159, current: 1218161 Beta
然后你只需遵循每个过程:
-
进程1218158将两个子进程1218159和1218160分叉并打印Omega。
-
进程1218159打印Alpha,然后分叉长子进程1218161并打印Omega。
-
进程1218160打印Beta。
-
进程1218161打印Beta。