References:c语言fork函数
在linux下,C语言创建进程用fork函数。fork就是从父进程拷贝一个新的进程出来,子进程和父进程的进程ID不同,但用户数据一样。
执行fork函数后有2种返回值:对于父进程,返回的是子进程的PID(即返回一个大于0的数字);对于子进程,则返回0,所以我们可以通过pid这个返回值来判断当前进程是父进程还是子进程。
#include <stdio.h> #include <unistd.h> int main(int argc, char* argv[]){ printf("Before fork!\n"); pid_t pid = fork(); printf("pid value: %d\n", pid); printf("After fork!\n"); if(pid > 0){ printf("Parent process, pid: %d\n", getpid()); }else if(pid == 0){ printf("Child Process, pid: %d, parent pid: %d\n", getpid(), getppid()); }else{ printf("Fork failed!\n"); } printf("Process end!\n"); sleep(1); return 0; }
1.以下方式将递归创建8个子进程
#include <stdio.h> #include <unistd.h> int main(int argc, char* argv[]){ printf("Before fork!\n"); pid_t pid; for(int i = 0; i < 3; i++){ pid = fork(); } printf("pid value: %d\n", pid); printf("After fork!\n"); if(pid > 0){ printf("Parent process, pid: %d\n", getpid()); }else if(pid == 0){ printf("Child Process, pid: %d, parent pid: %d\n", getpid(), getppid()); } printf("Process end!\n"); sleep(1); return 0; }
2.如何循环三次得到三个子进程?
#include <stdio.h> #include <unistd.h> int main(int argc, char* argv[]){ printf("Before fork!\n"); pid_t pid; for(int i = 0; i < 3; i++){ pid = fork(); if(pid == 0) break; } printf("pid value: %d\n", pid); printf("After fork!\n"); if(pid > 0){ printf("Parent process, pid: %d\n", getpid()); }else if(pid == 0){ printf("Child Process, pid: %d, parent pid: %d\n", getpid(), getppid()); } printf("Process end!\n"); sleep(1); return 0; }