#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
pid_t pid;
//由于在fork之前,所以这个begin一定是父进程打印的
printf("[%d]:begin!\n", getpid());
//这句话无比重要,否则可能出现begin打印2次的诡异现场。终端执行可能还好,重定向到文件试一下,begin会被打印2次;
fflush(NULL);
//在fork之前,务必要刷新该刷新的流!!!!
//开始分裂,出现子进程
pid = fork();
//如果不出错,不会出现pid<0的情况
if (pid < 0) {
perror("fork()");
exit(1);
}else if (pid == 0) { //如果是子进程(pid为0),则打印如下
printf("[%d]:child is working!\n", getpid());
}else { 如果是父进程(pid大于0),则打印如下
//sleep(1); //父进程里加了一个sleep,则肯定子进程先运行
printf("[%d]:parent is working!\n", getpid());
}
//这句话回比较特殊,父进程和子进程都会执行这句话,因为fork的时候已经将程序分裂了,两个进程(父、子)都会顺序往后执行。
printf("[%d] end!\n", getpid());
//注意,这里父子进程谁先运行,由调度器决定,不一定谁先执行
exit(0);
}
用fork创建子进程
最新推荐文章于 2024-03-11 19:12:53 发布