Linux教程

C语言linux系统fork函数

本文主要是介绍C语言linux系统fork函数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

References:c语言fork函数

一、fork函数简介

  1. 作用

在linux下,C语言创建进程用fork函数。fork就是从父进程拷贝一个新的进程出来,子进程和父进程的进程ID不同,但用户数据一样。

  1. 父进程和子进程的区分

执行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.如何循环三次得到三个子进程?

  • 不让子进程fork出新的子进程。
#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;
}
  • 运行结果:
这篇关于C语言linux系统fork函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!