Linux系统中C语言编程创建函数fork()执行解析

一、Linux系统中C语言编程创建函数fork()执行解析

1. 简介

在Linux系统中,通过fork() 函数可以创建出一个子进程(child process),让子进程拥有与父进程(parent process)相同的代码和数据的副本,然后各自独立运行。它是用于创建新进程的系统调用,可以更简便地创建新进程并与该进程进行通信。

2. 语法

创建子进程的函数原型为:

#include <sys/types.h>
#include <unistd.h>

pid_t fork(void);

函数调用成功时会返回两个值,分别是在父进程和子进程中得到的返回值,例如在子进程中返回的是0,而在父进程中则返回创建出的子进程的进程ID(process ID)。

3. 实例

实例1:父进程创建子进程,并在子进程中输出一句话。
#include <stdio.h>
#include <unistd.h>
void main() {
    pid_t pid; // pid_t是指用于进程ID号的系统数据类型
    char* message;
    int n;
    printf("fork program starting\n");
    pid = fork();
    switch (pid) {
    case -1:
        printf("fork failed\n"); // 创建失败,输出提示信息
        break;
    case 0:
        message = "This is the child process";
        n = 5;
        break;
    default:
        message = "This is the parent process";
        n = 3;
        break;
    }
    // 在父子进程中都要输出的语句
    for (; n > 0; n--) {
        puts(message);
        sleep(1);
    }
}
实例2:拓展实例1,在子进程中再次创建子进程并输出两句话。
#include <stdio.h>
#include <unistd.h>
void main() {
    pid_t pid1, pid2; // pid_t是指用于进程ID号的系统数据类型
    char* message1;
    char* message2;
    int n;
    printf("fork program starting\n");
    pid1 = fork();
    switch (pid1) {
    case -1:
        printf("fork failed\n");
        break;
    case 0:
        message1 = "This is the child process1";
        n = 2;
        pid2 = fork();// 在第一个子进程中再次fork()函数创建第二个子进程
        switch (pid2) {
        case -1:
            printf("fork failed\n");
            break;
        case 0:
            message2 = "This is the child process2";
            break;
        default:
            message2 = "This is the parent of child2";
            break;
        }
        break;
    default:
        message1 = "This is the parent process";
        n = 3;
        break;
    }
    for (; n > 0; n--) {
        if (pid1 == 0) {
            puts(message1);// 在第一个子进程中输出message1
        }
        else {
            if (pid2 == 0) {
                puts(message2);// 在第二个子进程中输出message2
            }
            else {
                puts(message1);// 在父进程中输出message1
            }
        }
        sleep(1);
    }
}

以上两个示例可以通过gcc编译器进行编译,具体命令行如下:

$gcc -o fork fork.c

然后在Linux系统终端环境中运行生成的可执行文件。

示例1输出结果: 

fork program starting
This is the parent process
This is the child process
This is the child process
This is the child process
This is the child process

示例2输出结果:

fork program starting
This is the parent process
This is the child process1
This is the child process2
This is the child process1
This is the parent of child2
This is the child process1

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Linux系统中C语言编程创建函数fork()执行解析 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • 比特币原理是什么?比特币原理详解

    比特币原理是什么? 比特币(Bitcoin)是一种去中心化的数字货币,是基于点对点网络技术和密码学算法实现的。它的核心原领是区块链技术,是一种分布式账本技术,使得比特币能够实现去中心化、防篡改。 比特币采用共识机制来保证交易的安全和可靠性。它没有中心化的发行机构,每一笔交易都被记录到区块链上。同时,比特币的发行数量是有限的,最大发行量不超过2100万枚。 比…

    C 2023年5月22日
    00
  • golang如何自定义json序列化应用详解

    自定义 JSON 序列化是 Golang 开发中非常有用的技术。 通过自定义序列化规则,我们可以将 Golang 程序数据结构转为 JSON 字符串或者将 JSON 字符串转为 Golang 数据结构,使得数据交互操作更加简单方便。本文将详细介绍如何在Golang中自定义JSON 序列化。 1.自定义JSON序列化 1.1 json.Marshal() 要实…

    C 2023年5月23日
    00
  • JSP学习之Java Web中的安全控制实例详解

    JSP学习之Java Web中的安全控制实例详解,是一篇讲解Java Web项目中应用安全控制的文章。在Web项目中,安全控制是非常重要的一环。本文将详细介绍实现Java Web应用中的安全控制的过程。 什么是安全控制 首先,我们需要了解什么是安全控制。在Web应用中,安全控制是指对应用程序进行访问限制以保证应用的安全性。安全控制可以是身份验证、授权、审计等…

    C 2023年5月23日
    00
  • C语言算法练习之折半查找的实现

    C语言算法练习之折半查找的实现 什么是折半查找 折半查找(也称二分查找)是一种在有序数组中查找指定元素的查找算法,时间复杂度为O(logn)。 实现步骤 在实现折半查找前,需要明确以下几个步骤: 确定查找区间范围; 计算查找区间的中间位置; 比较中间位置和目标值; 不断缩小查找范围,直到找到目标值或者查找区间为空。 下面我们来一步步实现。 定义函数 首先需要…

    C 2023年5月22日
    00
  • PHP中常见的密码处理方式和建议总结

    PHP中常见的密码处理方式和建议总结 在PHP中,密码处理是一个重要的安全问题。本文将介绍PHP中常见的密码处理方式和建议总结。 常见的密码处理方式 明文存储 明文存储是最不安全的方式,它直接将用户的密码以明文形式存储在数据库中,容易被黑客猜测和盗取,不建议使用。 MD5加密 MD5是一种常用的哈希算法,可以将字符串转换为长度固定的哈希值。使用MD5加密用户…

    C 2023年5月23日
    00
  • 如何修复Win11/10坏图像错误0xc0000020?

    当Win11/10出现坏图像错误0xc0000020时,可能是由于您的显卡驱动程序损坏或未正确安装。下面是完整的修复步骤: 步骤1:重新安装显卡驱动程序 1.打开设备管理器,展开“显示适配器”选项。 2.右击显示适配器,选择“卸载设备”。 3.下载并安装最新版本的显卡驱动程序,可以在厂商官网下载。 4.安装完成后,重启计算机,检查错误是否消失。 步骤2:运行…

    C 2023年5月23日
    00
  • 小米4c怎么样?小米4c搭载骁龙808和Type-C

    当谈到小米4c时,我们需要关注它的配置和性能。小米4c主打设计良好且价格亲民的特点,它的主要优势在于骁龙808处理器和Type-C接口。 小米4c搭载骁龙808处理器 小米4c搭载了骁龙808处理器,它是高通推出的一款六核心处理器,其中两个大核心时钟频率高达1.8GHz,剩下的四个小核心时钟频率为1.4GHz。 骁龙808处理器采用了Adreno 418 G…

    C 2023年5月23日
    00
  • 如何选购好用的曲面屏显示器 十大曲面屏显示器排行榜

    如何选购好用的曲面屏显示器 近年来,曲面屏显示器因其独特的优势,受到越来越多消费者的追捧。然而,市面上千千万万的曲面屏显示器品牌和型号,又该如何选择呢?下面是一些很实用的购买曲面屏显示器的攻略,可供您参考。 1.选择最适合你的尺寸 首先,必须选择最适合个人使用习惯的尺寸。曲面屏显示器的尺寸通常从24英寸到40英寸不等,建议在购买前先确定自己所需要的尺寸。 2…

    C 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部