pid_t pid = fork()
程序执行遇到fork函数会创建子进程,若创建成功,则在父进程中的fork函数将会返回子进程的进程号,而子进程的fork函数会返回0;否则在父进程中fork返回-1。
创建好子进程,两个进程会开始运行相同的程序(从fork那里开始运行)
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main(){
printf("start\n");
pid_t pid = fork();
if (pid < 0){
perror("fork error");
exit(1);
}
else if (pid == 0)
printf("child proc\n");
else
printf("father proc,child pid is %d\n", pid);
printf("proc over\n");
return 0;
}
结果:
getpid()获取当前进程id
getppid()获取父进程id
父子进程会共享文件描述符和mmap映射区,对于全局变量,读时共享写时复制。
在fork之后究竟是哪个进程先执行,并不确定,需取决于内核调度算法。
gdp调试跟踪父子进程
可在fork函数调用前输入指令set follow-fork-mode parent/child