【Linux初阶】进程的相关概念 | 进程管理 & 查看进程 & 获取进程标识符 & fork进程创建

LINUX系统进程管理 进程是计算机系统中最重要的概念之一,在计算机系统中并行运行着大量的程序,这些程序不可能独占系统的全部资源,而是需要这些程序共享系统资源,所以这些程序在运行时会产生一定的竞争关系。那在这种情况下,系统资源怎么分配?运行程序该如何管理呢?操作系统为了解决这一系列的问题引入了进程的概念,用来作为操作系统分配和管理系统资源的基本单位。所以进程的出现是为了让系统资源的利用更加合理,从而提高系统的运行效率。定义进程,就避免不了提到另一个概念“程序”。 阅读详情

 🌟hello,各位读者大大们你们好呀🌟

🍭🍭系列专栏:【Linux初阶】

✒️✒️本篇内容:进程的概念,进程管理初识(描述、管理进程),查看进程的基础方法,获取进程标识符(pid、ppid),fork进程创建(分流应用)

🚢🚢作者简介:计算机海洋的新进船长一枚,请多多指教( •̀֊•́ ) ̖́-

目录

一、什么是进程

二、进程的管理

1.描述进程-PCB

2.程序控制块(PCB)的管理 

三、查看进程

四、通过系统调用获取进程标示符

1.进程和父进程

2.清除进程

五、进程创建 - fork

1.一般进程创建

2.通过系统调用创建进程-fork初识

3. fork的分流应用


一、什么是进程

进程的概念,有很多种不同的说法,我们看的最多的说法之一就是:一个运行起来的(加载到内存) 的程序,被称为进程。进程和程序相比,具有动态属性。

实际上,进程 = 内核数据结构(task_struct)+  进程对应的磁盘代码


二、进程的管理

首先,我们要清楚一个前提——程序是一个文件,它存储在磁盘中。其次,我们要知道,要执行一个程序需要把程序加载到内存中。

接下来我们还需要了解一些相关的基础知识,来将进程的知识串联起来。

1.描述进程-PCB

  • 进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。
  • 课本上称之为PCB(process control block,中文名为程序控制块),Linux操作系统下的PCB是: struct task_struct
  • PCB对象是操作系统创建的

我们可以把PCB理解为一种struct结构体或类,专门用于存储加载到内存的各个程序的属性,比如程序的状态、运行的优先级等。

 

2.程序控制块(PCB)的管理 

通过上面的知识,我们知道了内存中有从磁盘加载进来的程序块,每个程序块有对应的PCB,那么问题来了,计算机是如何对加载到内存中的程序进行管理的呢?我们通过下面的图示来理解  

  • “管理”的执行本质:先描述,再组织;
  • 描述:PCB(struct task_struct),对程序信息进行了描述;
  • 组织:操作系统通过特定的数据结构,将不同的PCB(程序控制块)及其对应的程序组织(加载到内存的程序块)联系起来,最终实现对程序的管理。

进程 = 内核数据结构(PCB)+  进程对应的磁盘代码。操作系统可以通过PCB找到对应的磁盘代码,因此,只要我们实现了对PCB的管理,也就相当于实现了进程的管理。

进程组织:所有运行在系统里的进程都以task_struct链表的形式存在内核里。我们可以在内核源代码里找到它。

内存中PCB和程序块的组织形式如下图所示


三、查看进程

在Linux中查看进程的操作,实际上和我们再window上查看任务管理器是差不多的。

ps axj | head -1 && ps axj | grep ‘myproc’  或
ps axj | head -1 && ps axj | grep 4974(进程id)
  • ps axj - 查看系统所有进程;
  • head -1(数字1) - 打印标题;
  • grep ‘myproc’ - 对除文件myproc外进行行过滤。

  进程在被调度运行的时候,进程就具有动态属性


四、通过系统调用获取进程标示符

1.进程和父进程

  • 进程id(PID)
  • 父进程id(PPID)

gerpid() - 获取当前进程的id(PID)

getppid() -  获取当前进程的父进程的id(PPID)

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
     printf("pid: %d\n", getpid());
     printf("ppid: %d\n", getppid());
     return 0;
}

2.清除进程

kill -9 4974(进程id)    #kill -9 表示强制终止退出


五、进程创建 - fork

1.一般进程创建

实际上,我们运行的一个可执行程序,就是一个进程

命令行上启动的进程,在无特殊情况下,它的父进程都是bash。(bash为进程名,它是一个命令行解释器)

通常进程运行都是在子进程下运行,子进程和父进程相互独立但是又数据共享。目的是保护计算机安全(防止进程对系统进行危险操作)。

当程序单线程运行时,进程在子进程下运行。多次运行同一运行程序,子进程id改变,父进程id不变,说明每次运行该程序的子进程变了,但是每个子进程对应的父进程不变。

2.通过系统调用创建进程-fork初识

  • 运行 man fork 认识fork(除了起始页,还可通过底部命令行指令:/return val查看返回值);
  • fork有两个返回值(如果成功,子进程的pid返回父进程,0返回给子进程;如果失败,返回-1);
  • 父子进程代码共享,数据各自开辟空间,私有一份(采用写时拷贝)。

接下来我们看下面这段代码 

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
    //创建子进程 -- fork是一个函数 -- 函数执行前:只有一个父进程 -- 函数执行后:父进程+子进程
     fork();
     printf("我是一个进程,pid:%d, ppid: %d\n", getpid(), getppid());

     sleep(2);
     return 0;
}

3. fork的分流应用

 通过文档我们了解到,fork 之后通常要用 if 进行分流【通过返回值不同实现分流】

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
     pid_t id = fork();
     if(id < 0)
    {
         perror("fork");
         return 1;
     }
     else if(id == 0)
     { 
        //child
        printf("I am child : %d!, id: %d\n", getpid(), id);
     }
     else
     { 
        //father
        printf("I am father : %d!, id: %d\n", getpid(), id);
     }

     sleep(1);
     return 0;
 }

 结果是,父进程和子进程将会同时运行,因此我们可以得出结论

  • fork() 之后,会有父进程+子进程两个进程执行后续代码(拥有多个线程,多个执行流,这就是我们所说的多线程)
  • fork后续的代码,被父子进程共享(注意:共享不代表需要一个进程执行所有代码)
  • 通过返回值不同,可以让父子进程各自执行后续共享代码的一部分

 

 通过对进程和合理化利用,就可以多进程/多线程运行程序,实现并发式编程!!!


 🌹🌹 Linux进程的相关概念大概就讲到这里啦,博主后续会继续更新更多Linux操作系统的相关知识,干货满满,如果觉得博主写的还不错的话,希望各位小伙伴不要吝啬手中的三连哦!你们的支持是博主坚持创作的动力!💪💪 

【VMware篇】7-通过ISO镜像升级VMware Esxi 本文主要介绍Dell服务器上安装的ESXi升级的方法之一(采用ISO升级)。 阅读详情

相关推荐

手把手教你用Qt和QScada框架,从零搭建一个简易的工业组态监控界面

本文详细介绍了如何使用Qt和QScada框架从零搭建工业组态监控界面,涵盖环境配置、界面设计、动态数据绑定及高级功能实现。通过实战案例演示,帮助开发者快速掌握SCADA系统开发技巧,提升工业自动化项目的开发效率。

weixin_32932149的博客 334

Linux-进程的介绍和标示符

1.知道了进程是由PCB和进程的数据和代码构成的。(重点)2.知道了使用fork函数创建另一个流,实现一份代码,两个进程,一个称为父进程,一个称为子进程,并且子进程和父进程可以拥有不同的运行结果。3.学会了怎么使用 ps 命令来查看进程的相关信息。

fengjunziya的博客 408

[ensp报错:USG6000V错误代码45解决方案]

[ensp报错:USG6000V:错误代码45解决] [ensp报错:USG6000V:错误代码45解决] 第一种处理方式: ensp的45错误帮助文档里的解决方法:(这里就不说了,上华为爸爸的图) ensp的45错误:如果你的45错误不是描述的那个,可能是ensp与virtualbox不兼容了。 错误描述:具体表现为在virtualbox里没有vfw_usg的条目,虚拟介质管理器里也没有相应的条目: 就是vfw_usg_vdi这个 这种情况下你把ensp卸载重装多少次都没用,原因在两个软件的兼容

weixin_45456536的博客 3万+

Linux进程基础:fork函数

Linux进程复制,fork函数的使用

Singularitys123的博客 1417

LiveGBS流媒体平台GB/T28181实战指南:海康NVR物联网卡摄像头注册失败全链路排查与抓包技巧

本文详细解析了LiveGBS流媒体平台中海康NVR物联网卡摄像头注册失败的常见问题及解决方案。通过全链路排查与抓包技巧,包括物联网卡配置、多网卡冲突处理、防火墙设置等,帮助用户快速定位并解决GB/T28181协议下的设备注册难题,提升流媒体平台部署效率。

weixin_29290947的博客 488

【VSCode Python无法格式化代码】

提示:需要Install Formatter…安装插件autopep8,点击install。出现Format Document。

AIFRZ的博客 1万+

Linux系统编程(四)—— 进程基本知识

简单讲解了一些进程的基础知识,如fork,wait,exec函数族

qq_50615776的博客 1986

Unity URP管线下的Highlight Plus插件,从导入到实现物体高亮的保姆级避坑指南

本文详细解析了在Unity URP管线中使用Highlight Plus插件实现物体高亮的完整流程与常见问题解决方案。从URP环境配置、插件导入避坑到相机设置优化,提供了一套完整的保姆级指南,帮助开发者高效解决高亮效果不显示等典型问题,并包含移动端性能优化与复杂场景管理的高级技巧。

weixin_27379781的博客 405

【Linux】进程的标识符、状态、优先级(超详解)

但是在等待期间,OS内存严重不足(OS是由权限来杀掉进程来释放空间的),这时如果OS看到这个等待的进程,把他杀掉,那么就会造成一个严重的问题:磁盘在读取数据时出来问题,这时它回去找调度它的进程,但是这时候发现进程没有了?已经运行完毕,但是需要维持自己的退出信息,在自己进程的task_struct中会记录自己的退出信息,让父进程来读取,如果父进程没有读取,则该进程会一直存在。fork()---->多个进程----->父子关系------>一般代码会共享,但是数据是各自私有一份的。返回值大于0,则为父进程;

weixin_74116463的博客 1127

Vue3 - 超详细最新 wangEditor V5 富文本编辑器安装引入及使用教程,提供工具栏配置、基础富文本功能、API使用示例教程等(新手小白快速引入并植入到项目中)

vue3,wangEditorv5富文本编辑器,wangEditorv5官方文档,vue3最新安装wangEditorv5富文本详细使用教程,vue3使用wangEditorv5编辑器示例代码,vue3网站网页安装植入富文本编辑器教程,vue3wangEditor使用api,vue3安装富文本控制台出现报错如何解决,vue3wangEditor-v5工具栏配置,vue3中使用富文本编译器wangEditor5的方法,wangeditor5在vue3中的全使用过程,vue3超详细最新wangedi

🏆 前端领域优质创作者 4250

海康DS-7604N-K1/RTB固件包

【摘要】海康DS-7604N-K1/RTB萤石云设备发布V4.30.091版本升级程序(2022.09.19),仅适用于指定型号。升级前需先升级至V3.4.106基础版本,刷机会重置设备为未激活状态,需重新设置admin密码。该机型支持密码/手势登录,无密码时可通过U盘升级。注意事项:升级存在风险,需确认程序适用性;升级过程严禁断电;必须阅读压缩包内的刷机说明。此为定制机型,非必要不建议升级。(150字)

海康威视技术支持 1543

linux中每个进程都有唯一的进程标识,Linux进程标识

1.进程标识(1)进程标识说明每个进程都有一个非负整型的唯一进程ID。因为进程ID标识符总是唯一的,常将其用作其他标识符的一部分以保证其唯一性。在Linux中,进程ID 0是调度进程,常常被称为交换进程。该进程并不执行任何磁盘上的程序—它是内核的一部分,因此也被称为系统进程。进程ID 1通常是init进程,在自举过程结束时由内核调用。init通常读与系统有关的初始化文件(/etc/rc*文件),并...

weixin_35117981的博客 4107

OpenClaw 从新手到中级完整教程【完整 持续更新版】

OpenClaw(曾用名 ClawdBot/Moltbot)是 2026 年最火的开源 AI Agent 项目,GitHub 已获得超过 68,000 星标。它不是普通的聊天机器人,而是一个真正能够执行任务的个人 AI 助理。

FeelTouch Labs 3099

【Linux探索学习】第十二弹——初识进程:进程的定义、描述和一些简单的相关操作

【Linux探索学习】第十二弹:进程的理解:本篇文字叙述较多,手把手讲解了进程的基本知识,相信认真看完的你一定会有所收获的!!!

2301_80220607的博客 2992

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex&trade;-M4F 内核的信息,请参见《Cortex&trade;-M4F 技术参考手册》。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【Linux】初识进程概念与 fork 函数的应用

进程是操作系统中资源分配和调度的核心单位,而 fork() 函数是创建子进程的关键工具。本节将简要介绍进程的概念,并通过 fork() 探讨其实际应用。

专注于 C/C++ 后端开发,涵盖基础语法、Linux系统与网络、MySQL数据库、常见算法及项目经验。 3822

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【Linux】深入理解进程管理与fork系统调用的实现原理

介绍了进程的基本概念与fork系统调用的实现原理

qq_74319491的博客 4467

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【linux】进程|查看进程|PID值|fork原理

假设在一个文件中写代码,并生成一个可执行程序在磁盘中,可执行程序本质也是一个二进制文件文件 =内容+属性内容即 自己写的代码和数据属性即 创建时间、权限等信息使用 ./ 将其加载到内存中,cpu访问代码和数据,从而执行代码,把代码和数据放入内存中 就可以叫做进程么?当然不是!举例:如何成为你的学校的学生呢?只要想办法进入你的学校里,在学校里,就是你的学校的学生么?当然不是,看门的大爷和楼管阿姨也在学校里想要成为学生,必须在学籍档案中有你个人的基本信息同理,

qq_62939852的博客 4440

【Linux从入门到放弃】进程概念、查看进程、创建进程

那在还没有学习进程之前,就问大家,操作系统是怎么管理进行进程管理的呢?很简单,先把进程描述起来,再把进程组织起来!我们之前任何启动并运行程序的行为,都是操作系统帮助我们将程序转化为进程,完成特定的功能。

@情话 1148

进程探秘:从 PCB 到 fork 的核心原理之旅

在操作系统的世界里,“进程” 是一个贯穿始终的核心概念。无论是我们日常打开的浏览器、运行的代码,还是后台默默工作的服务,本质上都是一个个 “进程” 在操作系统的调度下有序运行。理解进程,是掌握操作系统工作机制、走进并发编程世界的第一步。本文将从最基础的 “进程是什么” 讲起,带你逐层揭开进程的神秘面纱:从描述进程的核心数据结构 PCB(进程控制块),到 Linux 内核中具体的task_struct;

2302_79376097的博客 2014

Linux系统编程:理解进程概念

OS中不仅仅只有一个进程,可能运行着多个进程(比如我们可能同时运行着qq和qq音乐),所以OS必须要将进程管理起来!!根据我们以往的管理经验,我们需要先描述再组织!!

weixin_51142926的博客 4194

Linux进程管理

进程是Linux系统中最基本的执行单元,它们可以被创建、管理、通信和退出。本文将详细介绍Linux进程的基本概念、状态、管理方法。

weixin_65262119的博客 2237

【Linux仓库】进程概念与基本操作【进程·贰】

本文摘要:本文介绍了Linux中进程的基本概念与操作。进程由内核数据结构(PCB)和代码数据组成,操作系统通过链表管理多个进程。讲解了进程属性(PID、状态、优先级等)和进程切换机制(上下文保存与恢复)。通过/proc系统文件夹和ps工具可查看进程信息,包括父进程PPID。重点阐述了fork系统调用创建子进程的过程及其双返回值特性(父进程返回子进程PID,子进程返回0),为后续学习进程管理和虚拟地址空间奠定基础。

egoist2023的博客 2079

Linux 创建进程 fork()、vfork() 与进程管理

在Linux中,父进程和子进程共享文件描述符,这意味着它们对同一个文件的操作可能相互影响。例如,如果父进程和子进程都操作同一个文件描述符,文件的偏移量可能会改变,从而导致输出混合。进程标识符用于标识和管理进程。系统调用的工作原理基于复制父进程的虚拟内存空间并为子进程创建一个新的进程。时,当前进程(父进程)会复制一份新的进程(子进程)。不会复制父进程的虚拟内存,而是让父进程暂时停止执行,直到子进程调用。运行该代码时,父子进程会并行执行,打印各自的进程ID。会让子进程与父进程共享内存空间,父进程在子进程调用。

qq_45797625的博客 1334

Linux之进程管理一

头歌educatorLinux之进程管理一

qq_59748730的博客 1万+

【Linux】进程管理(1):进程及概念精讲

进程概念引入 二、进程的描述与组织:进程控制块(PCB)与进程标识符(PID) 三、fork函数:创建子进程 四、进程的地址空间:虚拟内存与写时复制 五、进程查看 六、进程状态 七、父子进程、孤儿进程、僵尸进程 孤儿进程: 僵尸进程 八、进程的优先级 九、环境变量 【选学】 十、Linux操作系统进程的调度 1、活动队列详解 2、过期队列详解 3、O(1)调度算法

2301_76606232的博客 1679

【Linux】进程概念和进程状态

通过学习进程的创建、调度、同步等机制,你可以更好地掌握操作系统的运行原理,进而优化系统性能和解决实际问题。本文将从基础知识入手,带领大家逐步深入探索 Linux 中进程的各个方面,帮助你在 Linux 学习的道路上迈出坚实的第一步。

2301_80955819的博客 1891
上一篇: 【C++进阶之路】第一篇:C++中的继承
下一篇: 【Linux初阶】进程状态 | Linux下常见进程状态讲解 & 进程循环打印方法 & ls>makefile指令 & makefile$@^特殊符号的应用
Captain-Lin
博客等级 码龄5年 321粉丝 114原创
评论 22
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值