展开菜单
首页 精品内容 本月促销 装机必备 Windows macOS软件 IOS软件 Android AI PDF教程 专题
全部分类

当前位置:

首页 > 硬件相关 > Linux进程入门:理解进程管理

Linux进程入门:理解进程管理

前言:本文将逐步深入探讨进程相关内容。在进入进程讨论之前,我们需要再次回顾操作系统的基本概念。接下来,我们会介绍进程的定义、如何查看进程,以及在Linux中与进程相关的文件等问题。进程是一个庞大的主题,会持续更新多节,因此其知识点较为复杂,同学们需要特别注意。首先,我们需要理解为什么需要操作系统。操作系统的主要工作是管理软硬件资源。管理硬件是通过驱动程序实现的,这些程序将硬件数据组织成链表,操作系统可以直接修改链表信息,从而通过驱动程序管理硬件。这种方法是先描述再组织,最终实现对硬件的管理。然而,操作系统

前言:

本文将逐步深入探讨进程相关内容。在进入进程讨论之前,我们需要再次回顾操作系统的基本概念。接下来,我们会介绍进程的定义、如何查看进程,以及在Linux中与进程相关的文件等问题。进程是一个庞大的主题,会持续更新多节,因此其知识点较为复杂,同学们需要特别注意。

首先,我们需要理解为什么需要操作系统。

操作系统的主要工作是管理软硬件资源。管理硬件是通过驱动程序实现的,这些程序将硬件数据组织成链表,操作系统可以直接修改链表信息,从而通过驱动程序管理硬件。这种方法是先描述再组织,最终实现对硬件的管理。然而,操作系统的根本目的是为用户提供良好、稳定、高效和安全的服务,因此需要采用相应的方法来管理各种资源。

从操作系统的结构图中我们可以看到,操作系统包括进程管理等多种管理功能。操作系统在管理进程时,允许多个进程同时存在。例如:

初识Linux · 进程(2)

这些都是进程。要查看电脑中的进程,只需按esc + shift + ctrl打开任务管理器即可。这证明了进程是可以多重存在的。

那么,什么是进程呢?

如果将某个工程的数据和代码加载到内存中,代码是否会自动运行呢?答案是否定的,因为CPU并没有读取这些数据。当代码开始运行时,就产生了一个进程。进程不仅仅是正在运行的程序,它是由PCB(进程控制块)加上自己的代码和数据构成的。

那么,什么是PCB呢?PCB是一个包含多种数据类型的结构体,用于存储进程的相关信息。类比于操作系统管理硬件时需要硬件信息来构建链表,操作系统通过修改链表实现对硬件的管理。PCB的全称是process control block,即进程控制块。之所以称为控制块,是因为操作系统可以通过对PCB的操作来控制进程。

因此,我们得出结论:进程 = PCB + 自己的代码和数据。

为什么需要PCB的概念呢?

因为操作系统遵循“先描述再组织”的原则。通过PCB,操作系统可以在内存中以链表的形式连接多个进程,每个PCB包含指向下一个PCB的指针。这样,操作系统可以通过管理链表来管理进程。

具体的PCB结构体名称是task_struct。外国人将其称为task,因为他们认为这是任务的一种表现形式。

进程是动态运行的,我们如何理解动态运行呢?

在内存中,操作系统占据一定空间,用于管理各种软硬件。当不同的进程进入内存时,需要排队处理。因此存在task_queue,即进程队列。动态运行实际上是多个PCB排队的过程。

初识Linux · 进程(2)

具体内容将在后续文章中详细介绍。

现在让我们来看看task_struct的内部属性:

无论是运行指令还是编写代码,本质上都是创建一个进程。指令执行得非常快,我们通常看不到其过程。那么,如何区分不同的进程呢?每个进程都有一个唯一的标识,即pid(进程ID),类似于学生的学号。

我们如何查看pid呢?

在回顾上篇文章中介绍的系统调用接口:

初识Linux · 进程(2)

系统调用是操作系统提供的函数,我们从未调用过它,现在是时候调用我们人生中的第一个系统调用接口了。我们使用man手册查询可知:

初识Linux · 进程(2)初识Linux · 进程(2)

从手册说明中我们了解到,2号接口是系统库函数调用,即我们即将学习的getpid:

#include 
#include 
#include 

int main()
{
  printf("I am a process\nMy pid is %d\n",getpid());
  return 0;
}

有趣的是,getpid()函数需要两个头文件才能使用。

初识Linux · 进程(2)

打印结果正常,每次运行的进程ID都不同,我们的初步目标已经达成。但进程肯定不止这些内容,我们应该输入ps -xaj来查看,这里先记住,xaj的顺序无关紧要:

#include 
#include 
#include 

int main()
{
  while(1)
  {
    printf("I am a process\nMy pid is %d\n",getpid());
    sleep(1);
  }
  return 0;
}

我们修改代码为死循环,以便观察:

初识Linux · 进程(2)

我们使用管道筛选出包含test的进程,前两个我们可以理解,但为什么grep也有呢?因为ps -xaj打开了进程,通过管道筛选,筛选也是一个进程。如果我们不想看到grep进程,可以使用:

初识Linux · 进程(2)

使用grep -v grep反向筛选出不含grep的进程:

初识Linux · 进程(2)

当然,直接使用ps -xaj就相当于Windows中的任务管理器,可以查看所有进程。

我们可以看到,打印出来的pid是14191,在打印出来的head -1中也有pid,也是14191,所以pid打印是没有问题的。

现在我们再来看ppid是什么?ppid的全称是parent process id,即父进程的ID。有人可能会问,父进程?这东西还有继承关系吗?我们可以在一个进程中创建多个进程,使用到的函数是fork():

初识Linux · 进程(2)

这里有一个非常有趣的点,会颠覆你的编程观念,即返回值pid_t,本质上是unsigned int,这里先留个悬念。

我们来看一段有趣的代码:

#include 
#include 
#include 

int main()
{
  printf("I am a father process!\n");
  fork();
  printf("I am a child process\n");
  return 0;
}

试问这段代码的运行结果是什么?

直接看结果:

初识Linux · 进程(2)

可以发现打印了两次第二次的printf,我们可以这样理解:我是一个公司老板,在没有招员工之前一直做相同的事,招了员工之后,员工和我做相同的事,但我之前做的工作员工还需要做吗?不需要,所以第一行的printf不会执行,父进程原本的代码是要执行printf的,所以会打印两次child process。

  while(1)
  {
    printf("This is parent process:%d\nThis is child process:%d\n",getppid(),getpid());
    sleep(1);
  }

初识Linux · 进程(2)

打印结果显示,父进程的ID是22252,子进程ID是22239,在ppid和pid下面也得到了验证。

更多内容请看后续文章!!!

感谢阅读!

本文内容来源于互联网,如有侵权请联系删除。
作者最新文章
硬件相关 Linux
相关文章 更多
精品专题 更多
本月促销

正软商城本月促销专区,汇集办公、设计、安全、影音、系统工具及AI软件等正版软件优惠活动,提供限时折扣、特价授权和优惠购买信息,活动库存及价格以页面实时展示为准。

装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

macOS软件

正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

IOS软件

正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

AI

正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

PDF教程

正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

Mac软件 更多
灵活计算器
灵活计算器

灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

赤友清理大师
赤友清理大师

赤友清理大师是一款为 Mac 设计的智能清理优化工具,可精准扫描垃圾、大文件、重复文件等,释放磁盘空间。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

极度公式
极度公式

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

图几
图几

图几是一款适用于 macOS 的截图、标注与美化工具,支持离线操作保障隐私。界面整理和高频系统操作被放到一起考虑,桌面或窗口内容一多时,管理起来会更省心。

密码键盘
密码键盘

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

思源笔记
思源笔记

思源笔记是一款本地笔记软件,提供所见即所得的编辑方式,为长文写作带来顺滑的体验。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

Office 365 简体中文
Office 365 简体中文

一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。

WALTR PRO
WALTR PRO

WALTR是一款电脑至iOS文件传输转换工具,操作简单,快速实现文件识别与传送。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

CodeExpander
CodeExpander

CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。

Mountain Duck
Mountain Duck

Mountain Duck 是一款能将多个网盘挂载到本地的工具,像本地磁盘一样使用网盘。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。

Menuist
Menuist

Menuist 是一款面向 macOS 的 Finder 右键菜单增强工具,主要用来补充新建文件、快捷导航等常用操作,让日常文件管理和访问路径时更高效、更顺手。

Mole
Mole

Mole 是一款专为 Mac 设计的深度清理优化工具,涵盖缓存清理、应用管理及实时状态监控等功能。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。

WINDOWS 更多
Windows 10
Windows 10

Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

极度公式
极度公式

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

密码键盘
密码键盘

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

思源笔记
思源笔记

思源笔记是一款本地笔记软件,提供所见即所得的编辑方式,为长文写作带来顺滑的体验。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

傲梅轻松备份
傲梅轻松备份

傲梅轻松备份是一款专业易用的数据备份软件,为重要数据提供安全保障。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

Office 365 简体中文
Office 365 简体中文

一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。

Wise Folder Hider Pro
Wise Folder Hider Pro

Wise Folder Hider Pro 是一款专业级文件和文件夹隐藏加密软件,为私密数据添加多重保护。高频操作更强调就近处理,浏览、整理和跨目录移动文件时,来回切换和重复点击都会少很多。

WALTR PRO
WALTR PRO

WALTR是一款电脑至iOS文件传输转换工具,操作简单,快速实现文件识别与传送。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

CodeExpander
CodeExpander

CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。

PinStack
PinStack

PinStack是一款轻量级的Windows平台剪贴板管理工具,优化您的剪贴板使用体验。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

Mountain Duck
Mountain Duck

Mountain Duck 是一款能将多个网盘挂载到本地的工具,像本地磁盘一样使用网盘。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。

Seer
Seer

Seer是一款在Win平台下的空格键功能增强效率工具,只需轻敲空格键,就能预览几乎任何格式的文件。它更适合把零散的小功能集中起来使用,处理高频琐碎任务时会更省事。