【linuxC语言】进程概念与fork

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、进程的概念
  • 二、进程基本函数
    • 2.1 fork函数
    • 2.2 getpid与getppid函数
  • 三、示例代码
  • 总结


前言

在 Linux 系统编程中,进程是计算机中正在执行的程序的实例。每个进程都有自己独立的地址空间、代码段、数据段、堆栈等,使得它们能够彼此独立运行,互不干扰。Linux 系统中的进程是通过进程标识符(PID)来唯一标识的。而在 Linux 中,fork() 是一个非常重要的系统调用,用于创建新的进程。调用 fork() 后,将在原来的进程之上创建一个新的进程,新进程是原进程的一个副本,但具有自己独立的地址空间。本文将探讨进程的概念以及 fork() 函数的用法和作用。


一、进程的概念

想象一下,你正在一边玩游戏,一边听音乐,又同时在浏览网页。这些都是在计算机上运行的程序,而每个程序就像是在计算机上的一个小小的“工作人员”,负责执行特定的任务。现在,这些“工作人员”同时在计算机上忙碌地工作,互相之间不干扰,这就好像是计算机上的不同进程一样。

所以,进程就是计算机中正在执行的程序的实例。每个进程都有自己的任务和工作空间,它们之间互相独立,互不干扰。就像是一群工作人员在不同的工作区域里各自忙碌地工作一样。

二、进程基本函数

2.1 fork函数

原型:

#include <unistd.h>
pid_t fork(void);

作用:
fork() 函数用于创建一个新的进程,新进程是调用进程的一个副本,新进程执行主进程fork下面的代码。父进程调用 fork() 后,会创建一个新的子进程,子进程会复制父进程的地址空间、资源和代码,但有着独立的执行流程。

参数和返回值:

参数:fork() 函数不接受任何参数。
返回值:在父进程中,fork() 返回新创建子进程的 PID,如果创建失败则返回 -1。在子进程中,fork() 返回 0。

2.2 getpid与getppid函数

  1. getpid() 函数:

原型:

#include <unistd.h>
pid_t getpid(void);

作用:
getpid() 函数用于获取当前进程的 PID(进程标识符)。

参数和返回值:

参数:getpid() 函数不接受任何参数。
返回值:返回当前进程的 PID。

  1. getppid() 函数:
    原型:
#include <unistd.h>
pid_t getppid(void);

作用:
getppid() 函数用于获取当前进程的父进程的 PID。

参数和返回值:

参数:getppid() 函数不接受任何参数。
返回值:返回当前进程的父进程的 PID。

三、示例代码

#include <stdio.h>
#include <unistd.h>

int main() {
    pid_t pid; // 定义进程标识符变量

    pid = fork(); // 调用fork()函数

    if (pid == -1) {
        // 创建子进程失败
        perror("fork");
        return 1;
    } else if (pid == 0) {
        // 子进程代码
        printf("这是子进程,PID:%d\n", getpid());
    } else {
        // 父进程代码
        printf("这是父进程,PID:%d,子进程的PID:%d\n", getpid(), pid);
    }

    return 0;
}

在这里插入图片描述


总结

在 Linux 系统中,进程是程序执行的基本单位,每个进程都拥有自己的地址空间和资源。通过 fork() 系统调用,可以在原进程之上创建一个新的进程,新进程是原进程的一个副本。父进程和子进程在调用 fork() 之后都会继续执行,但是它们的执行上下文和返回值不同。父进程会得到子进程的 PID,而子进程的 PID 则为 0。fork() 函数的灵活性使得它成为 Linux 编程中的一个重要工具,可以用于实现并发执行、进程间通信等功能。因此,了解进程的概念和 fork() 函数的用法对于 Linux 系统编程是非常重要的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/586350.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Spring基础】关于Spring IoC的那些事

文章目录 一、如何理解IoC1.1 Spring IOC 概述1.2 IoC 是什么 二、Ioc 配置的方式2.1 xml 配置2.2 Java 配置2.3 注解配置 三、依赖注入的方式3.1 setter方式3.2 构造函数3.3 注解注入 小结 一、如何理解IoC 1.1 Spring IOC 概述 控制反转 IoC(Inversion of Control)是一种设计…

分辨率与像素

一 概念 分辨率: 分辨率指的是图像或显示器屏幕上可见的像素数量&#xff0c;通常以水平像素数和垂直像素数表示。例如&#xff0c;一个分辨率为1920x1080的屏幕意味着在水平方向上有1920个像素&#xff0c;在垂直方向上有1080个像素。分辨率决定了图像或屏幕上能够显示的细节…

神经网络反向传播算法

今天我们来看一下神经网络中的反向传播算法&#xff0c;之前介绍了梯度下降与正向传播~ 神经网络的反向传播 专栏&#xff1a;&#x1f48e;实战PyTorch&#x1f48e; 反向传播算法&#xff08;Back Propagation&#xff0c;简称BP&#xff09;是一种用于训练神经网络的算…

qt5-入门-2D绘图-Graphics View 架构

参考&#xff1a; Qt Graphics View Framework_w3cschool https://www.w3cschool.cn/learnroadqt/4mvj1j53.html C GUI Programming with Qt 4, Second Edition 本地环境&#xff1a; win10专业版&#xff0c;64位&#xff0c;Qt 5.12 基础知识 QPainter比较适合少量绘图的情…

蓝桥杯如何准备国赛?

目录 一、赛前准备 1、如何刷题&#xff0c;刷哪些题&#xff1f; 2、记录&#xff08;主要看个人习惯&#xff09; CSDN博客 写注释 3、暴力骗分 4、从出题人的角度出发&#xff0c;应该如何骗分 二、赛中注意事项 一、赛前准备 1、如何刷题&#xff0c;刷哪些题&…

Ubuntu 24.04安装搜狗输入法-解决闪屏问题

问题描述 在Ubuntu 24.04 LTS系统中按照官方安装指导《Ubuntu20.04安装搜狗输入法步骤》安装搜狗输入法后&#xff1a; 会出现屏幕闪烁&#xff0c;无法正常使用的问题&#xff1b;系统搜索框和gnome-text-editor无法使用搜狗输入法&#xff1b; 原因分析 闪屏可能是Ubuntu…

ESP32-C3第二路串口(非调试)串口打通(1)

1. 概述与引脚复用 《ESP32-C3 系列芯片技术规格书》中提到&#xff0c;ESP32-C3系列芯片中有两路串口。 第1路串口就是常用的调试串口&#xff0c;在笔者使用的ESP32-C3-DevKitC-02开发板中&#xff0c;这一路串口通过CP2102 USB转UART桥芯片与电脑的USB口相连接&#xff0c;…

c4d渲染动画只能渲染1帧怎么回事?c4d云渲染解决1秒停止

当您在C4D中尝试渲染动画时&#xff0c;如果只渲染出了一个静止的帧&#xff0c;这通常意味着您的设置中存在一些问题。动画本身是由一系列连续的静态图像&#xff08;帧&#xff09;组成的&#xff0c;如果只生成了一帧&#xff0c;那么显然是渲染设置出现了错误。为了解决这个…

如何利用快解析远程访问NAS、FTP、Web服务

什么是内网、外网&#xff1f; 所谓内网就是内部建立的局域网络或办公网络。一家公司或一个家庭有多台计算机&#xff0c;他们利用不同网络布局将这一台或多台计算机或其它设备连接起来构成一个局部的办公或者资源共享网络&#xff0c;我们就称它为内部网络&#xff0c;也叫内…

微服务之SpringCloud AlibabaSeata处理分布式事务

一、概述 1.1背景 一次业务操作需要跨多个数据源或需要跨多个系统进行远程调用&#xff0c;就会产生分布式事务问题 but 关系型数据库提供的能力是基于单机事务的&#xff0c;一旦遇到分布式事务场景&#xff0c;就需要通过更多其他技术手段来解决问题。 全局事务&#xff1a;…

计算机网络4——网络层4内部路由选择协议

文章目录 一、有关路由选择协议的几个基本概念1、理想的路由算法2、分层次的路由选择协议 二、内部网关协议 RIP1、协议 RIP 的工作原理2、特点3、距离向量算法4、坏消息传播慢 三、内部网关协议 OSPF1、基本特点2、OSPF 的五种分组类型 本节将讨论几种常用的路由选择协议&…

【Mac】mac 安装 prometheus 报错 prometheus: prometheus: cannot execute binary file

1、官网下载 Download | Prometheus 这里下载的是prometheus-2.51.2.linux-amd64.tar.gz 2、现象 解压之后启动Prometheus 启动脚本&#xff1a; nohup ./prometheus --config.fileprometheus.yml > prometheus.out 2>&1 & prometheus.out日志文件&#xff…

【C++】:类和对象(下)

目录 一&#xff0c;再谈构造函数1.初始化列表2. 隐式类型转换的过程及其优化3. 隐式类型转换的使用4. explcit关键字5. 单参数和多参数构造函数的隐式类型转换 二&#xff0c;static成员1.静态成员变量2.静态成员函数 三&#xff0c;友元3.1 友元函数3.2 友元类 四&#xff0c…

Vue ui 创建vue项目,详细使用攻略。

1.安装及启动 1.1 Vue ui 使用前提是全局安装vue.js 命令如下 npm install vue -g 1.2 安装过Vue.js 之后 随便在自己系统的一个地方打开命令面板 1.3 使用命令启动vue ui面板创建项目 vue ui 如图运行后显示这种就是启动成功&#xff0c;成功之后会弹出页面或者直接访问你的…

QT5制做两个独立窗口

目录 增加第二个窗口 主窗口文件添加一个私有成员为子窗口 定义两个槽函数和 关联按钮和子窗口和主窗口 添加子窗口成员 子窗口处理函数 补充回顾 增加第二个窗口 1、 2、 3 主窗口文件添加一个私有成员为子窗口 在mainwidget.h文件 同时添加两个槽&#xff1b;来处理…

Visual studio 2019 编程控制CH341A芯片的USB设备

1、硬件 买了个USB可转IIC、或SPI、或UART的设备&#xff0c;主芯片是CH341A 主要说明USB转SPI的应用&#xff0c;绿色跳线帽选择IIC&SPI&#xff0c;用到CS0、SCK、MOSI、MISO这4个引脚 2、软件 2.1、下载CH341A的驱动 点CH341A官网https://www.wch.cn/downloads/CH34…

人工智能工具的强大之处:我用过的最好用的AI工具

人工智能工具的强大之处&#xff1a;我用过的最好用的AI工具 在当今科技迅速发展的时代&#xff0c;人工智能(AI)工具已经成为我们日常生活和工作中不可或缺的一部分。从语音助手到自动化内容创建工具&#xff0c;再到数据分析软件&#xff0c;AI的应用领域广泛且深远。本篇博…

【antd + vue】InputNumber 数字输入框 输入限制

一、需求说明 只能输入数字和小数点&#xff0c;保留小数点后两位&#xff1b;最多输入6位&#xff1b;删除所有内容时&#xff0c;默认为0&#xff1b; 二、问题说明 问题1&#xff1a;使用 precision 数值精度 时&#xff0c;超出规定小数位数时会自动四舍五入&#xff1b;…

LLM应用:让大模型prompt总结生成Mermaid流程图

生成内容、总结文章让大模型Mermaid流程图展示&#xff1a; mermaid 美人鱼, 是一个类似 markdown&#xff0c;用文本语法来描述文档图形(流程图、 时序图、甘特图)的工具&#xff0c;您可以在文档中嵌入一段 mermaid 文本来生成 SVG 形式的图形 Prompt 示例&#xff1a;用横向…

PDF 正确指定页码后,挂载的书签页码对不上

这个问题与我的另一篇中方法一样 如何让一个大几千页的打开巨慢的 PDF 秒开-CSDN博客 https://blog.csdn.net/u013669912/article/details/138166922 另做一篇原因是一篇文章附带一个与该文章主题不相关的问题时&#xff0c;不利于被遇到该问题的人快速搜索发现以解决其遇到的…
最新文章