#include <unistd.h>
pid_t fork(void);
fork() creates a new process by duplicating the calling process.
1. 一个进程通过调用fork会创建一个被称为子进程的副本。父进程从调用fork()的地方执行,子进程也一样
2. 子进程是一个新建立的进程,因此有一个与父进程不一样的进程ID。因此可以通过调用getpid()检测自身运行的子进程还是父进程。
3. 不过,fork函数对父子进程提供不同的返回值--一个进程“进入“fork()调用,而另外一个则从调用中“出来“。父进程得到的fork()调用的返回值是子进程的ID,子进程得到的返回值是0(该点尤为重要). 因为任何进程的ID都不为0,程序可以借此判断自身运行的是那个进程。
1 // fork.c 2 #include<stdio.h> 3 #include<sys/types.h> 4 #include<unistd.h> 5 6 int main() 7 { 8 pid_t child_pid; 9 10 printf("The main process ID is %d ", (int)getpid()); 11 child_pid = fork(); // 父子进程同时由此开始执行 12 13 if (child_pid != 0) // fork 调用后,父进程得到子进程的ID,而子进程得到0,所以该处是父进程进入执行 14 { 15 printf("[%d]: The process ID is %d ", __LINE__, (int)getpid()); 16 } 17 else 18 { 19 printf("[%d]: The process ID is %d ", __LINE__, (int)getpid()); 20 } 21 22 printf("[process ID]:%d 此处会调用两次,父子进程都会调用他 ", getpid()); // 此处会调用两次,父子进程都会调用他 23 24 return 0; 25 }