Linux友人帐之进程管理

2023-10-08 23:28
文章标签 linux 管理 进程 友人

本文主要是介绍Linux友人帐之进程管理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、基本概念

1、在Liux中,每一个程序都是有自己的一个进程,每一个进程都有一个id号!
2、每一个进程呢,都会有一个父进程!
3、进程可以有两种存在方式:前台!后台运行!
4、一般的话服务都是后台运行的,基本的程序都是前台运行的!

1.1进程概念

对于我们的了解来说,什么是进程呢? 有的资料是这么说:一个运行起来的程序(加载到内存)叫做进程;在内存中的程序叫做进程。也就是说,进程和程序相比具有动态属性。

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

 对于之前我们通过C写出的进度条程序来说,其本质就是一个文件并且存放在磁盘中。但是其并没有真正的运行,当我们运行程序的时候,文件就会从磁盘加载到内存,但是磁盘中那么多的文件全部加载到内存中明显是不现实的并且我们也不需要其他文件加载到内存,这时候就需要操作系统对文件进行管理从而只让我们想要执行的程序加载到内存,那操作系统是如何管理的呢?

先描述,再组织

1.2 进程的执行过程

通过上述的概念,我们了解的并不多,那么接下来就来分析一下:如果有很多这样的进程加载到内存中,操作系统要如何进行管理呢? 即利用先描述再组织的思想。

而所谓的先描述,这里引进了一个新的概念:PCB :进程控制块 struct task_struct{}

1. 那么什么是进程控制块呢?

进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合,称之为PCB(process control block)在Linux中描述进程的结构体叫做task_struct。

在磁盘中的程序中,并没有进程控制块以及内部属性信息的存在,而是加载到内存之后通过操作系统的一系列的管理才出现的。

//进程控制块
struct task_struct
{//该进程的所有属性//该进程对应的代码和属性地址struct task_struct *next;
};

2. 进程控制块如何对进程进行管理的呢?

  • 磁盘中的可执行程序在将要运行时,所有的进程中的数据(并不是程序本身)加载到内存中,此时操作系统会建立起一个PCB来保存每一个程序的信息

这个时候PCB就会对每一个进程都建立起相应的结构体(即进程控制块)将对应的进程的属性、代码等匹配的传到这个结构体中:(这就是先描述)

 

  • 此时,操作系统就会将每一个进程控制块都连接起来,形成链表结构,并返回头结点。这样便通过数据结构的形式将进程的信息组织起来。

通过这样的先描述再组织的思想,当我们处理优先级高的进程时,我们就可以通过遍历头结点,找到优先级最高的那个节点的信息,并将这个进程的代码执行。

3.为什么要有进程控制块(PCB)呢?

对进程管理的核心是对数据进行管理,因此当我们加载程序到内存之前,我们必须拿到所有程序的数据,由于拿到的数据杂乱无章并且未进行分类,这时候就需要PCB将其归类,将对应的数据放到相应的进程控制块里!

 即加载进程的时候,操作系统为了方便管理会new一个struct task_struct也就是进程控制块的结构体,然后一点点的将上面加载的数据填充到这里的内部属性(状态,标记,追踪等),因此这里再一次强调了:进程不是程序加载到内存,而是在内存中new了task_struct结构体!

二、进程的基本操作

2.1查看进程

ps命令

Linux ps命令是用来显示当前进程的状态的,类似于Windows的任务管理器。ps命令有很多参数,可以用来控制输出的格式和内容。ps命令的基本语法是:

ps [options] [–help]

其中,options可以是以下几种:

  • a:显示所有与终端相关的进程
  • u:显示进程的用户及内存等信息
  • x:显示没有控制终端的进程
  • aux:相当于au+x,显示所有包含其他用户的进程
  • l:显示长格式的信息,包括优先级、父进程ID等
  • e:显示所有进程

ps命令输出的信息包括以下几个字段:

  • USER:进程的所有者
  • PID:进程的ID
  • %CPU:进程占用的CPU百分比
  • %MEM:进程占用的内存百分比
  • VSZ:进程占用的虚拟内存大小(单位KB)
  • RSS:进程占用的物理内存大小(单位KB)
  • TTY:进程运行的终端
  • STAT:进程的状态
  • START:进程开始的时间
  • TIME:进程占用CPU的运行时间
  • COMMAND:产生此进程的命令

其中,STAT字段表示进程的状态,有以下几种可能:

  • D:无法中断的休眠状态(通常是I/O操作)
  • R:正在运行或可运行的状态
  • S:静止状态,可被唤醒
  • T:暂停或被追踪的状态
  • Z:僵尸状态,已终止但未被回收
  • <:高优先级的进程
  • N:低优先级的进程
  • L:有内存分页分配并锁在内存中(实时系统或I/O操作)
  • s:父进程(有子进程存在)
  • l:多线程的进程
  • +:前台运行的进程

 grep命令

Linux grep命令是一个强大的文本搜索工具,它可以使用正则表达式来匹配文件或标准输入中的文本。grep命令的基本语法是:

grep [选项] [模式] [文件]

其中,选项可以控制grep命令的行为,如是否忽略大小写,是否显示行号,是否递归搜索等。模式是要匹配的字符串或正则表达式。文件是要搜索的文件名,可以是多个文件,如果省略文件参数,则默认从标准输入中读取数据。

grep命令有两个变体,分别是egrep和fgrep。egrep命令相当于grep -E,它使用扩展的正则表达式来匹配文本。fgrep命令相当于grep -F,它使用固定的字符串来匹配文本,不解释正则表达式中的特殊字符。

pstree命令

Linux pstree命令是用来显示当前进程的状态的,类似于Windows的资源管理器。pstree命令可以使用ASCII字符或UTF-8字符来显示进程之间的树状结构,清楚地表达进程之间的相互关系。pstree命令的基本语法是:

pstree [选项] [pid|user]

其中,选项可以是以下几种:

  • -p:显示进程的PID
  • -u:显示进程的所属用户
  • -a:显示进程的完整命令和参数
  • -c:不合并相同名称的进程
  • -n:按照PID排序进程
  • -l:使用长格式输出,不截断长名称
  • -A:使用ASCII字符连接进程树
  • -U:使用UTF-8字符连接进程树
  • -h:高亮显示指定的PID或用户的进程树
  • -H:高亮显示指定的PID或用户的进程树,并隐藏其他进程

如果不指定pid或user参数,则默认显示所有进程,以init或systemd为根节点。如果指定pid参数,则只显示该进程及其子进程。如果指定user参数,则只显示该用户拥有的进程。

 2.2 结束进程

结束进程有两种方式,下面就来介绍:

1.通过指令结束进程

Linux的kill,它可以让您控制和管理您的系统上运行的进程。kill命令的基本语法是:

kill [options] pid

其中,options是可选的参数,用于指定要发送给进程的信号,pid是要终止的进程的标识符。您可以使用不同的信号来影响进程的行为,例如:

  • 1 (HUP):重新加载进程。
  • 9 (KILL):强制杀死一个进程。
  • 15 (TERM):正常停止一个进程。

2.通过ctrl + c快捷键

通过快捷键ctrl + c也可以结束进程。

2.3进程的系统调用

getpid函数

Linux的getpid函数是一个系统调用,它用于获取当前进程的进程标识符(PID)。PID是一个非负整数,用于唯一标识一个进程。getpid函数的原型如下:

pid_t getpid(void);

其中,pid_t是一个整型类型,定义在sys/types.h头文件中。getpid函数没有参数,返回值是调用进程的PID。如果发生错误,getpid函数不会失败,也不会设置errno变量。

getpid函数的一个常见用途是生成唯一的临时文件名,例如:

char filename[20]; sprintf(filename, "tmp.%d", getpid());

这样可以保证不同的进程不会产生相同的临时文件名。另一个用途是在调试或日志记录中输出进程的信息,例如:

printf("Process %d started.\n", getpid());

这样可以方便地追踪进程的运行状态。

getppid函数

除了getpid函数,还有一个相关的函数是getppid函数,它用于获取当前进程的父进程的PID。父进程是指创建当前进程的进程,通常通过fork或vfork函数来创建子进程。getppid函数的原型如下:

pid_t getppid(void);

它和getpid函数类似,没有参数,返回值是父进程的PID。如果当前进程没有父进程,或者父进程已经终止,那么返回值是1,表示init进程。init进程是系统中第一个启动的进程,它负责初始化系统和启动其他服务。

getppid函数的一个常见用途是在子进程中判断父进程是否还存活,例如:

if (getppid() == 1) { printf("Parent process is dead.\n"); exit(1); }

这样可以避免子进程成为孤儿进程,或者处理一些异常情况。

 

这篇关于Linux友人帐之进程管理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/168701

相关文章

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同

安全管理体系化的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。摄像头管理模块用于多种终端设备、智能设备的接入及管理。平台支持包括摄像头等终端感知设备接入,为整个平台提

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

Linux服务器Java启动脚本

Linux服务器Java启动脚本 1、初版2、优化版本3、常用脚本仓库 本文章介绍了如何在Linux服务器上执行Java并启动jar包, 通常我们会使用nohup直接启动,但是还是需要手动停止然后再次启动, 那如何更优雅的在服务器上启动jar包呢,让我们一起探讨一下吧。 1、初版 第一个版本是常用的做法,直接使用nohup后台启动jar包, 并将日志输出到当前文件夹n