程序
#include <stdio.h>
#include <stdlib.h>
#include <syslog.h>
#include <sys/types.h>
#include <unistd.h>
#include <errno.h>
#include <sys/param.h>
int main(void){
printf("main pid: %d\n-------------\n", getpid());
printf("\n------main do fork1------\n\n");
int pid = fork();
printf("fork1 result: %d\n", getpid());
if(pid > 0){
// 父进程
printf("main thread current pid: %d\n\n", getpid());
exit(0);
}else{
// 子进程
printf("child1 pid: %d\n", getpid());
pid_t sid = setsid();
printf("\n------child1 do fork2------\n\n");
pid = fork();
printf("fork2 result: %d\n", getpid());
if(pid == 0){
printf("child2 pid: %d\n", getpid());
}else{
printf("child1 pid: %d\n", getpid());
}
exit(0);
}
}
结果分析
可以看出:
fork上一语句都只执行了一次fork下一语句执行两次
结论
子进程执行起始位置应为fork语句下一行为或fork所在行;
但是,由于fork result不同,所以是fork所在行。
![[Linux]Linux子进程的执行起点 [Linux]Linux子进程的执行起点](https://cdn.jysafe.cn/wp-content/uploads/2021/11/2021110808545862.png!water.jpg)

