当前位置: 首页 > article >正文

【fork初体验】

文章目录

  • Linux 实验:深入理解 fork 系统调用
    • 一、实验目的
    • 二、实验环境
    • 三、实验内容与步骤
      • (一)打印进程的进程 ID 和父进程 ID
        • 1. 编写程序
        • 2. 编译与运行
        • 3. 运行结果
      • (二)使用 fork 系统调用创建进程并加入循环语句
        • 1. 编写程序
        • 2. 编译与运行
        • 3. 运行结果
    • 四、总结

Linux 实验:深入理解 fork 系统调用

一、实验目的

熟悉 Linux 实验环境,掌握 vi 编程及 gcc 编译方法。进一步认识 fork 系统调用的实质,了解其在进程创建中的独特作用。

二、实验环境

VMware 虚拟机,Red Hat Linux

三、实验内容与步骤

(一)打印进程的进程 ID 和父进程 ID

1. 编写程序

在这里插入图片描述

2. 编译与运行
  • 首先,使用 vi 编辑器创建一个新文件,比如xxx.c,将上述代码复制进去。在命令行输入 vi xxx.c,进入 vi 编辑器后,按 i 进入插入模式,粘贴代码,然后按 Esc键,输入 wq保存并退出。
    在这里插入图片描述
3. 运行结果

运行程序后,屏幕会显示当前进程的进程 ID 和父进程 ID,让我们直观地了解进程的相关信息。

(二)使用 fork 系统调用创建进程并加入循环语句

1. 编写程序

下面是使用 fork 系统调用创建进程并加入循环语句的 C 语言代码:
在这里插入图片描述

2. 编译与运行
  • 同样使用 vi 编辑器创建新文件,将上述代码复制进去。
  • 使用 gcc 编译,运行可执行文件。
    在这里插入图片描述
3. 运行结果

运行该程序后,我们会看到父进程和子进程交替输出信息。这是因为 fork 系统调用会创建一个新的子进程,父子进程会并发执行,具体的输出顺序取决于操作系统的调度策略。

四、总结

在编写代码的初期,我犯了一个看似简单却影响颇大的错误。我在编写程序时,一时疏忽忘记添加行头 #include <stdio.h>。当我使用 gcc 编译程序,满心期待它能顺利运行时,却遇到了一连串的报错。报错信息显示在遇到 printf 函数时出现问题,当时我十分困惑,反复检查代码逻辑,却始终找不到问题所在。后来在查阅资料和仔细思考后,我才意识到是忘记包含标准输入输出头文件。加上 #include <stdio.h> 后,重新编译程序,它便顺利运行了。这次经历让我深刻认识到头文件在 C 语言编程中的重要性,头文件为程序提供了必要的函数声明和宏定义,是程序正常运行的基础。
在这里插入图片描述

通过这次实验,我不仅熟悉了 Linux 实验环境,还掌握了 vi 编程及 gcc 编译方法。使用 vi 编辑器时,从最初的操作生疏到后来能够熟练地进行代码编写和修改,每一次敲击键盘都是技能的提升。而在使用 gcc 编译器时,我学会了如何根据不同的需求进行编译选项的设置,确保程序能够正确编译。
更重要的是,我对 fork 系统调用有了更深入的认识。在学习过程中,我参考了老师课上发的文件以及网络上关于 fork 函数的讲解,了解到了许多有趣的现象。例如,\n 对父子进程输出的影响,以及子进程的 ID 和父进程 ID 之间的关系。这些知识让我对操作系统的进程管理有了更直观的感受。
总之,这次实验让我收获颇丰,它不仅让我掌握了实用的编程技能,还为我后续的学习打下了坚实的基础。我相信,这些经验将在我未来的学习和实践中发挥重要作用。

相关文章:

【fork初体验】

文章目录 Linux 实验&#xff1a;深入理解 fork 系统调用一、实验目的二、实验环境三、实验内容与步骤&#xff08;一&#xff09;打印进程的进程 ID 和父进程 ID1. 编写程序2. 编译与运行3. 运行结果 &#xff08;二&#xff09;使用 fork 系统调用创建进程并加入循环语句1. 编…...

学习设计模式《六》——抽象工厂方法模式

一、基础概念 抽象工厂模式的本质是【选择产品簇(系列)的实现】&#xff1b; 抽象工厂模式定义&#xff1a;提供一个创建一系列相关或相互依赖对象的接口&#xff0c;而无需指定它们具体的类&#xff1b; 抽象工厂模式功能&#xff1a;抽象工厂的功能是为一系列相关对象或相互依…...

python_BeautifulSoup提取html中的信息

目录 描述&#xff1a; 过程&#xff1a; step one 下载html网页到本地 step two 提取html信息 list_con soup.select(.list-con) [0] li_list list_con.find_all(li) a li.find(span).find(a) title a.get(title) url a.get(href) span li.find(span).find(spa…...

单例设计模式之懒汉式以及线程安全问题

在单例设计模式中&#xff0c;懒汉式&#xff08;Lazy Initialization&#xff09; 通过延迟实例化来优化资源使用&#xff0c;但在多线程环境下存在线程安全问题。以下是其核心问题及解决方案的详细解析&#xff1a; 一、基础懒汉式代码&#xff08;线程不安全&#xff09; pu…...

今日头条如何查看IP归属地?详细教程与常见问题解答

在当今互联网时代&#xff0c;IP属地信息已成为各大社交平台展示用户真实性的重要标识。今日头条作为国内领先的资讯平台&#xff0c;也提供了IP属地显示功能。那么&#xff0c;今日头条怎么查看IP归属地&#xff1f;本文将详细介绍在今日头条11.9.0版本中如何查看自己和他人的…...

React-Hook

一、基础 Hooks 1、useState - 状态管理 useState 是 React 提供的一个函数&#xff0c;用来在函数组件中声明和修改状态&#xff0c;没有它&#xff0c;函数组件只是一个“静态模板”&#xff1b;有了它&#xff0c;函数组件可以保存和更新数据&#xff08;比如计数器数值、输…...

前端节流、防抖函数

节流 什么是节流&#xff1f; 节流就是同一个事件 一秒钟他执行了很多次。但是我不想他执行这么多次&#xff0c;我只想让他执行一次 或者两次。 那该怎么办&#xff1f; why baby why 那我想就是他执行的时候 我就设置一个定时器&#xff0c;如果定时器是空的&#xff0c;等会…...

高级java每日一道面试题-2025年4月26日-基础篇[反射篇]-什么是类型擦除?它与反射之间有什么关系?

如果有遗漏,评论区告诉我进行补充 面试官: 什么是类型擦除&#xff1f;它与反射之间有什么关系&#xff1f; 我回答: 类型擦除与反射的深度解析 一、类型擦除&#xff08;Type Erasure&#xff09; 类型擦除是Java泛型实现的核心机制&#xff0c;旨在通过编译期处理确保向…...

Centos7系统防火墙使用教程

CentOS 7是一种常见的Linux操作系统&#xff0c;防火墙作为网络安全的第一道防线&#xff0c;对于服务器的安全至关重要。本文将介绍CentOS 7系统中防火墙的使用教程&#xff0c;包括如何开启、关闭、配置以及防火墙规则的添加和删除。 一、查看防火墙状态 在开始操作之前&am…...

缓存与数据库数据一致性:旁路缓存、读写穿透和异步写入模式解析

旁路缓存模式、读写穿透模式和异步缓存写入模式是三种常见的缓存使用模式&#xff0c;以下是对三种经典缓存使用模式在缓存与数据库数据一致性方面更全面的分析&#xff1a; 一、旁路缓存模式&#xff08;Cache - Aside Pattern&#xff09; 1.数据读取流程 应用程序首先向缓…...

【物联网】基于LORA组网的远程环境监测系统设计(机智云版)

基于LORA组网的远程环境监测系统设计(机智云版) 演示视频: 简介: 1.本系统有一个主机,两个从机。 2.一主多从的LORA组网通信,主机和两个从机都配备了STM32F103单片机与 LoRa 模块,主机作为中心设备及WIFI网关,负责接收和发送数据到远程物联网平台和手机APP,两个从机…...

Pygame事件处理详解:键盘、鼠标与自定义事件

Pygame事件处理详解:键盘、鼠标与自定义事件 在游戏开发中,玩家的交互是至关重要的。无论是移动角色、触发动作还是暂停游戏,都需要通过各种输入来实现。Pygame作为一个功能强大的Python库,提供了丰富的API来处理这些输入,包括键盘、鼠标以及自定义事件。本文将详细介绍如…...

制作一款打飞机游戏22:表格导出

编辑器功能扩展 今天&#xff0c;我想让编辑器能够处理一个数组&#xff0c;这是编辑器将要编辑的东西&#xff0c;它只编辑数组。这些区域在后续的不同版本的编辑器中会有不同的含义&#xff0c;但现在我想创建一个模板&#xff0c;能够加载一个二维数组&#xff0c;并将二维…...

Linux内核源码结构

目录 Linux内核源码结构 Linux内核版本命名 Linux内核版本选择 内核源码结构 arch&#xff1a;与CPU架构相关的源代码 block:磁盘设备的支持 COPYING文件 CREDITS文件 crypto:加密相关 Documentation: drivers:设备驱动 firmware:固件 fs:文件系统 include:头文件…...

72.评论日记

【巫师】中美关税战02&#xff1a;应给人民爆装备&#xff0c;以及普通人如何应对(7条建议)_哔哩哔哩_bilibili 2025年4月26日11:03:31...

在springboot项目中,如何进行excel表格的导入导出功能?

以下是使用 Apache POI 和 EasyExcel 实现 Excel 表格导入导出功能的具体代码示例。 1. 使用 Apache POI 实现 Excel 导入导出 添加依赖 在 pom.xml 中添加 Apache POI 的依赖&#xff1a; <dependency><groupId>org.apache.poi</groupId><artifactId…...

Websocket自动发送消息客户端工具

点击下载《Websocket自动发送消息客户端工具》 1. 前言 在现代网络应用中&#xff0c;实时通信和即时数据传输变得越来越重要。WebSocket作为一种全双工通信协议&#xff0c;因其高效、实时的特点&#xff0c;被广泛应用于聊天应用、实时数据监控、在线游戏等领域。然而&…...

STM32的开发环境介绍

目录 STM32软件环境 Keil软件在线安装 其他软件环境安装 STM32开发的几种方式 STM32寄存器版本和库函数版本 标准外设库的作用&#xff1a; STM32软件环境 STM32 的集成开发环境&#xff08;IDE&#xff09;&#xff1a;编辑编译软件 常见的环境&#xff1a; (1)KEIL&a…...

数据库系统概论(四)关系操作,关系完整性与关系代数

数据库系统概论&#xff08;四&#xff09;详细讲解关系操作&#xff0c;关系完整性与关系代数 前言一、什么是关系操作1.1 基本的关系操作1.2 关系数据语言的分类有哪些 二、关系的完整性2.1 实体完整性2.2 参照完整性2.3 用户的定义完整性 三、关系代数是什么3.1 传统的集合运…...

基于 IPMI + Kickstart + Jenkins 的 OS 自动化安装

Author&#xff1a;Arsen Date&#xff1a;2025/04/26 目录 环境要求实现步骤自定义 ISO安装 ipmitool安装 NFS定义 ks.cfg安装 HTTP编写 Pipeline 功能验证 环境要求 目标服务器支持 IPMI / Redfish 远程管理&#xff08;如 DELL iDRAC、HPE iLO、华为 iBMC&#xff09;&…...

【AI提示词】财务顾问

提示说明 财务顾问是一个专注于帮助个人和企业优化财务状况、制定财务计划并实现财务目标的专业人士。 提示词 # Role: 财务顾问## Profile - language: 中文 - description: 财务顾问是一个专注于帮助个人和企业优化财务状况、制定财务计划并实现财务目标的专业人士。 - ba…...

使用 Node、Express 和 MongoDB 构建一个项目工程

本文将详细介绍如何使用 Node.js Express MongoDB 构建一个完整的 RESTful API 后端项目&#xff0c;涵盖&#xff1a; 项目初始化 Express 服务器搭建 MongoDB 数据库连接 REST API 设计&#xff08;CRUD 操作&#xff09; 错误处理与中间件 源码结构与完整代码 部署建…...

【C++11】右值引用和移动语义:万字总结

&#x1f4dd;前言&#xff1a; 这篇文章我们来讲讲右值引用和移动语义 &#x1f3ac;个人简介&#xff1a;努力学习ing &#x1f4cb;个人专栏&#xff1a;C学习笔记 &#x1f380;CSDN主页 愚润求学 &#x1f304;其他专栏&#xff1a;C语言入门基础&#xff0c;python入门基…...

【滑动窗口+哈希表/数组记录】Leetcode 3. 无重复字符的最长子串

题目要求 给定一个字符串 s&#xff0c;找出其中不含有重复字符的最长子串的长度。 子字符串是字符串中连续非空字符序列。 示例 1 输入&#xff1a;s "abcabcbb" 输出&#xff1a;3 解释&#xff1a;无重复字符的最长子串是 "abc"&#xff0c;长度为…...

pytest 技术总结

目录 一 pytest的安装&#xff1a; 二 pytest有三种启动方式&#xff1a; 三 用例规则&#xff1a; 四 配置框架&#xff1a; 一 pytest的安装&#xff1a; pip install pytest # 安装 pip install pytest -U # 升级到最新版 二 pytest有三种启动方式&#xff1a; 1…...

java中的Selector详解

Selector(选择器)是Java NIO(非阻塞I/O)的核心组件,用于实现I/O多路复用,允许单个线程管理多个通道(Channel),从而高效处理高并发场景。 一、Selector的核心概念与作用 I/O多路复用 Selector通过事件驱动机制,监听多个通道的就绪状态(如可读、可写、连接建立等),无…...

DeepSeek 的长上下文扩展机制

DeepSeek 在基础预训练完成后,引入 YaRN(Yet another RoPE extensioN method)技术,通过额外的训练阶段将模型的上下文窗口从默认的 4K 逐步扩展至 128K。整个过程分为两个阶段:第一阶段将上下文窗口从 4K 扩展到 32K;第二阶段则进一步从 32K 扩展到 128K。每个阶段均采用…...

【修复】Django收到请求报Json解析错误

Django收到请求报Json解析错误 场景分析解决 场景 在使用Postman发送Django的请求时&#xff0c;只能使用原来的json内容&#xff0c;如果修改json内容则会报json解析上的错误 分析 可能是有对请求内容的长度做了上报校验 解决 最终在请求头Headers里找到了Content-Length…...

openEuler对比CentOS的核心优势分析

openEuler对比CentOS的核心优势分析 在开源操作系统领域&#xff0c;openEuler与CentOS均占据重要地位&#xff0c;但随着CentOS维护策略的调整&#xff08;如CentOS 8停止维护&#xff0c;转向CentOS Stream&#xff09;&#xff0c;越来越多的用户开始关注国产化替代方案。o…...

Python基于Django的全国二手房可视化分析系统【附源码】

博主介绍&#xff1a;✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…...