1. fork基本使用
#include <unistd.h>
#include <stdio.h>
int main(){
pid_t pid = fork();
if(pid < 0){
perror("fork error");
}else if(pid > 0){
printf("I am Parent! getpid=%d, getppid=%d, pid=%d
",
getpid(), getppid(), pid);
}else{
printf("I am Son! getpid=%d, getppid=%d, pid=%d
",
getpid(), getppid(), pid);
}
printf("getpid=%d
", getpid());
sleep(1);
return 0;
}
运行:
基本说明:
fork的返回值,在父进程中返回的是子进程的进程ID, 在子进程中返回的是0。
补充说明:
使用fork创建子进程后, 子进程和父进程哪个先执行是由系统的进程调度模块进行调度执行的,不能硬说一定是哪个先被执行。
而针对本次运行,我们可以看到是父进程先一路把printf("getpid=%d ", getpid()) 这句代码也执行掉了,进入sleep。然后才轮到子进程开始执行。
2. 对fork子进程时的重要理解
我的关联博文:
系统编程-进程-探究父子进程的数据区、堆、栈空间/ 当带缓存的C库函数遇上fork
3. vfork很少使用,简单介绍
vfork创建子进程,子进程先运行,且不复制父进程的内存空间。
我的关联博文:
系统编程-进程-vfork使用
.