//fork.c
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
pid_t fpid; //fpid表示fork函数返回的值
int count = 0;
fpid = fork();
if (fpid < 0)
printf("error in fork!");
else if (fpid == 0) {
printf("\ni am the child process, my process id is %d\n", getpid());
printf("我是爹的儿子\n");//对某些人来说中文看着更直白。
count++;
}
else {
printf("\ni am the parent process, my process id is %d\n", getpid());
printf("我是孩子他爹\n");
count++;
}
printf("统计结果是: %d\n", count);
return 0;
}
打开终端输入以下命令
gcc -Og -g fork.c
./a.out
//fork1.c
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int i = 0;
printf("\ni son/pa ppid pid fpid\n");
//ppid指当前进程的父进程pid
//pid指当前进程的pid,
//fpid指fork返回给当前进程的值
for (i = 0; i<2; i++){
pid_t fpid = fork();
if (fpid == 0)
printf("\n%d child %4d %4d %4d\n", i, getppid(), getpid(), fpid);
else
printf("\n%d parent %4d %4d %4d\n", i, getppid(), getpid(), fpid);
}
同上得到结果
为了方便你看多加几个换行 对以上两个结果的解析:
可以把他们看成是链表结构.
应该是乱序执行的,每个机器输出的顺序可能不同.