程序
#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
所在行。