Linux世界中的指挥家:进程管理

文章一览

  • 前言
  • 一、多道程序设计
    • 1.1 顺序程序活动的特点
    • 1.2 多道程序设计
    • 1.3 程序并发执行的特征
  • 二、进程概念
    • 2.1 进程定义
      • 进程的根本属性:
    • 2.2 进程的基本特征
  • 三、进程状态
    • 3.1 进程的基本状态
    • 3.2 进程状态的转换
    • 3.3 进程族系
  • 四、进程管理命令
    • 4.1 查看进程状态
      • 4.1.1 ps命令
      • 4.1.2 ps命令输出常见的域
    • 4.2 进程管理
      • 4.2.1 kill命令
      • 4.2.2 sleep命令
      • 4.2.3 nice命令
      • 4.2.4 nohup命令
      • 4.2.5 wait命令
  • 五、Shell
  • 六、其他常用命令
    • 6.1 磁盘使用情况统计
      • 6.1.1 df 命令
      • 6.1.2 du命令
    • 6.2 文件压缩和解压缩
      • 6.2.1 gzip命令
      • 6.2.2 unzip命令
    • 6.3 进程控制——前台进程转为后台进程

前言

在Linux操作系统的复杂而精妙的架构中,进程管理扮演着核心角色,它是操作系统协调资源、调度任务和维护系统稳定性的关键。从简单的命令执行到复杂的后台服务,每个操作都涉及到进程的创建、监控和终止。了解Linux中的进程管理,就是掌握了操作系统的脉搏,能够洞察系统内部的动态变化,优化性能,确保安全,以及实现高效的资源利用。让我们深入探讨Linux进程管理的奥秘,学习如何驾驭这些并发运行的任务,以及如何通过精细的进程控制来提升整个系统的效能和响应能力。

一、多道程序设计

1.1 顺序程序活动的特点

  • 顺序程序活动具有顺序性、封闭性和可再现性三个主要特点
  • 如执行顺序指令、循环、函数调用等
  • 单道程序系统具有资源浪费、效率低等明显缺点。已不再采用

1.2 多道程序设计

多道程序设计是在内存中同时存放多道程序,它们在管理程序的控制下交替地在CPU上运行。

  • 大大改进系统性能
  • 吞吐量增加

程序的并发执行和系统资源的共享使得操作系统的工作变得很复杂

1.3 程序并发执行的特征

  • 失去封闭性。并发执行的多个程序共享系统中的资源,因而这些资源的使用状态不再仅由某个程序所决定,而是受到并发程序的共同影响。
  • 程序与计算不再一 一对应。“程序”是指令的有序集合,是“静态”概念;而“计算”是指令序列在处理机上的执行过程,是“动态”概念。
  • 并发程序在执行期间相互制约。并发程序的执行过程不再像单道程序系统那样总是顺序连贯的,而具有“执行—暂停—执行”的活动规律,各程序活动的工作状态与所处的系统环境密切相关。

二、进程概念

2.1 进程定义

​ 由于多道程序并发执行时共享系统资源,共同决定这些资源的状态,因此系统中各程序在执行过程中就出现了相互制约的新关系,程序的执行出现“走走停停”的新状态。

​ 用程序这个静态概念已不能如实反映程序并发执行过程中的这些特征。

​ 进程(或任务)是在60年代中期由美国麻省理工学院(MIT)J.H.Saltzer首先提出的,并在所研制的MULTICS系统上实现。IBM公司把进程叫做任务(task),它在TSS/360系统中实现了。

进程定义程序在并发环境中的执行过程

进程是已启动的可执行程序的运行实例,进程有以下组成部分

  • 已分配内存的地址空间;
  • 安全属性,包括所有权凭据和特权;
  • 程序代码的一个或多个执行线程;
  • 进程状态

程序: 二进制文件,静态 /bin/date, /usr/sbin/httpd,/usr/sbin/sshd, /usr/local/nginx/sbin/nginx

进程: 是程序运行的过程, 动态,有生命周期及运行状态。

进程的根本属性:

“进程”是操作系统的最基本、最重要的概念之一。进程最根本的属性是动态性并发性

2.2 进程的基本特征

  • 动态性

​ 进程是程序的执行过程,它有生有亡,有活动有停顿。可以处于不同的状态。

  • 并发性

​ 多个进程的实体能存在于同一内存中,在一段时间内都得到运行。

  • ③调度性

​ 进程是系统中申请资源的单位,也是被调度的单位。

  • ④异步性

​ 各进程向前推进的速度是不可预知的,即异步方式运行。

  • ⑤结构性

​ 进程有一定的结构,它由程序段、数据段和控制结构(如进程控制块)等组成。

三、进程状态

3.1 进程的基本状态

进程至少要有三种基本状态

  • ①运行态(Running)

​ 它的程序正在处理机上执行

  • ②就绪态(Ready)

​ 进程已具备运行条件,但因为其它进程正占用CPU,所以暂时不能运行而等待分配CPU的状态。

  • ③阻塞态(Blocked)

​ 进程因等待某种事件发生(例如等待某一输入、输出操作完成,等待其它进程发来的信号等)而暂时不能运行的状态。

3.2 进程状态的转换

进程在其生存期间不断发生状态转换——从一种状态变为另一种状态。

进程状态的转换需要一定的条件和原因

状态转换

(1)就绪->运行

  • 处于就绪状态的进程被调度程序选中,分配到CPU

(2)运行->阻塞

  • 正在运行的进程因某种条件未满足而放弃对CPU的占用

(3)阻塞->就绪

  • 处于阻塞状态的进程所等待的事件发生了

(4)运行->就绪

  • 正在运行的进程如用完了本次分配给它的CPU时间片

在很多系统中,又增加了两种基本进程状态,即新建状态终止状态

3.3 进程族系

父进程创建子进程,子进程再创建子进程,……

树的根结点(即第一个进程0#)是所有进程的祖先。

四、进程管理命令

4.1 查看进程状态

4.1.1 ps命令

ps命令是查看进程状态的最常用的命令,它可以提供关于进程的许多信息。

一般格式: ps [选项]

示例:

①直接用ps命令可以列出每个与你的当前shell有关的进程的基本信息:

②利用选项-ef可以显示系统中所有进程的全面信息:

ps -ef

③利用下面的命令可以显示所有终端上所有用户的有关进程的所有信息:

ps aux

其他选项:

ps -l 列出活动进程的详细状况;

ps -c 列出活动进程的优先级;

​ --forest 显示进程调用层次关系;

pstree 树形缩进形式显示进程调用关系;

top 动态显示进程变化情况,默认三秒更新一次;

4.1.2 ps命令输出常见的域

4.2 进程管理

4.2.1 kill命令

kill命令通过向进程发送指定的信号用来终止一个进程的运行。

一般格式:

kill  [-s  信号|-p ]  [-a]  pid...	
kill  -l [信号]

kill命令是通过向进程发送指定的信号来结束相应进程(pid)的。在默认情况下,采用编号为15的TERM信号。用编号为9的KILL信号,可以强行“杀掉”该进程。

示例:

sleep 200 $ # 这里的$ 代表在后台运行
ps 
kill  253
ps
# 再用ps命令查看进程状态时,就可以看到,sleep进程已经不存在了。
pgrep bash

4.2.2 sleep命令

使进程暂停由时间值所指定的秒数。此命令大多用于shell程序设计中,使两条命令执行之间停顿指定的时间。

下面的命令行使进程先暂停100秒,然后查看用户zhangyu是否在系统中:

 sleep  100; who | grep 'zhangyu'

4.2.3 nice命令

Linux系统中,进程的优先级取决于两个因素:进程剩余时间配额进程的优先数nice。优先数越小,其优先级越高。

用户可以利用nice命令设定进程的nice值。但一般用户只能设定正值,从而主动降低其优先级,只有特权用户才能把nice的值置为负数。

一般格式: nice [选项] [命令…]

示例:

sleep  300&
nice –n 5 sleep 300&
sudo nice –n -10 sleep 300&
ps –efl |grep sleep

4.2.4 nohup命令

nohup命令将忽略挂起信号对命令的影响而继续运行指定的命令(它可以带参数)。

一般格式: nohup 命令 [参数]…

示例:

nohup  sleep 5 & #忽略挂起信号对命令的影响而继续运行sleep 5
jobs # 使用 jobs 查看任务

4.2.5 wait命令

wait命令的功能就是等待指定的进程,并返回其终止状态。

一般格式: wait [n]

n可以是进程的ID或者作业描述符

sleep  20  &	#后台运行sleep 20,
#屏幕上打印出 [1] 10472
wait  10472	#wait命令可以使sleep 20执行完
wait  %1	#wait命令的参数既可以是进程ID也可以是job参数。

五、Shell

​ Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。

​ 实际上Shell是一个命令解释器, 它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。 Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。

六、其他常用命令

6.1 磁盘使用情况统计

6.1.1 df 命令

命令df可以报告文件系统中未用磁盘空间的情况。按照默认,磁盘盘块以1k字节为单位。

一般格式: df [选项]… [FILE]…

df

常用选项:

  • 如果使用-a选项,则把不占用磁盘空间的文件系统也列出来。
df -a
  • -h 使用易读模式输出磁盘占用信息

    df -h
    

6.1.2 du命令

命令du统计出每个目录占用磁盘空间的情况。该命令可以逐级进入每一个子目录并显示该目录的磁盘利用情况。

一般格式: du [选项]…[目录名]…

du

常用选项:

  • -h 使用易读模式输出磁盘占用信息
du -h
  • -s 表示summarize,仅显示统计量
du -s
du -sh . # . 表示当前目录下

6.2 文件压缩和解压缩

6.2.1 gzip命令

gzip命令用来对文件进行压缩和解压缩。

一般格式: gzip [选项] [name…]

name表示压缩(解压缩)文件名。被压缩文件的扩展名是**.gz, 并且保持原有的存取权限、访问与修改时间**。

示例:

把/home/cau/dir1目录下的每个文件都压缩成.gz文件:

常用选项:

  • -v 显示出指令执行过程
# gzip  -v  nohup.out  vitest.txt
  • -dv 把上面压缩的文件进行解压缩,并列出详细的信息:
gzip  -dv  * 
  • -l 显示压缩文件的信息(详细列出上面每个压缩文件的信息,但是不执行解压缩)
gzip  -l * 

将本目录下的文件进行快速压缩,并显示其压缩比:

gzip -v --fast *

6.2.2 unzip命令

unzip命令对ZIP格式的压缩文件进行解压缩。这种格式的压缩文件带有后缀.zip。

一般格式: unzip [选项] 被压缩文件名

示例:

将压缩文件chapter1.zip在当前目录下解压缩:

unzip chapter1.zip

首先压缩当前目录下所有文件,存为unzip.zip

zip  -v  unzip.zip  *

常用选项

  • -v 显示有关压缩文件的信息,但不作解压缩:
 unzip  -v  chapter1.zip

6.3 进程控制——前台进程转为后台进程

yes ok
jobs #查看作业号
fg %1 #将作业号为1的作业由挂起状态转为前台进程运行
bg %1 #重新运行挂起的进程但是以后台方式运行,后台运行的任务无法用ctrl+z暂停
ps # 查看job进程号,并用kill终止
kill [pid]

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LLMs之rStar:《Mutual Reasoning Makes Smaller LLMs Stronger Problem-Solvers》翻译与解读

LLMs之rStar:《Mutual Reasoning Makes Smaller LLMs Stronger Problem-Solvers》翻译与解读 导读:这篇论文提出了一种名为rStar的自我博弈互推理方法,用于增强小型语言模型 (SLMs) 的推理能力,无需微调或依赖更强大的模型。rStar…

软件测试面试题和简历模板(面试前准备篇)

一、问题预测 1、让简单介绍下自己(这个不用说了每次面试开场) 面试官,你好,我叫xxx,xx年本科毕业,从事软件测试将近3年的时间。在此期间做过一些项目也积累过一些经验,能够独立地完成软件测试…

BEVFormer论文总结

BEVFormer: Learning Bird’s-Eye-View Representation from Multi-Camera Images via Spatiotemporal Transformers BEVFormer:利用时空变换从多相机图像中学习鸟瞰表示 研究团队:南京大学、上海AI实验室、香港大学 ​ 代码地址:https://g…

(补)算法刷题Day24: BM61 矩阵最长递增路径

题目链接 思路 方法一:dfs暴力回溯 使用原始used数组4个方向遍历框架 , 全局添加一个最大值判断最大的路径长度。 方法二:加上dp数组记忆的优雅回溯 抛弃掉used数组,使用dp数组来记忆遍历过的节点的最长递增路径长度。每遍历到已…

目标检测-R-CNN

R-CNN在2014年被提出,算法流程可以概括如下: 候选区域生成:利用选择性搜索(selective search)方法找出图片中可能存在目标的候选区域(region proposal) CNN网络提取特征:对候选区域进行特征提取(可以使用AlexNet、VGG等网络) 目…

Sigrity SystemSI仿真分析教程文件路径

为了方便读者能够快速上手和学会Sigrity SystemSI 的功能,将Sigrity SystemSI仿真分析教程专栏所有文章对应的实例文件上传至以下路径 https://download.csdn.net/download/weixin_54787054/90171488?spm1001.2014.3001.5503

harmony UI组件学习(1)

Image 图片组件 string格式,通常用来加载网络图片,需要申请网络访问权限:ohos.permission.INTERNET Image(https://xxx.png) PixelMap格式,可以加载像素图,常用在图片编辑中 Image(pixelMapobject) Resource格式,加…

【Linux进程】进程间通信(共享内存、消息队列、信号量)

目录 前言 1. System V IPC 2. 共享内存 系统调用接口 shmget ftok shmat shmdt shmctl 共享内存的读写 共享内存的描述对象 3. 消息队列 msgget msgsnd msgctl 消息队列描述对象 4. 信号量 系统调用接口 semget semctl 信号量描述对象 5. 系统层面IPC资源 6.…

模型 八角行为分析法(行为激发)

系列文章 分享 模型,了解更多👉 模型_思维模型目录。激发行为的八大心理驱动力模型。 1 八角行为分析法的应用 1.1 支付宝蚂蚁森林 支付宝的蚂蚁森林是一个旨在鼓励用户参与环保活动的产品。用户通过日常的低碳行为(如步行、线上支付等&…

【数据结构练习题】链表与LinkedList

顺序表与链表LinkedList 选择题链表面试题1. 删除链表中等于给定值 val 的所有节点。2. 反转一个单链表。3. 给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。4. 输入一个链表,输出该链…

网安瞭望台第16期

国内外要闻 Apache Struts 文件上传漏洞(CVE - 2024 - 53677) 近日,Apache Struts 被发现存在文件上传漏洞(CVE - 2024 - 53677),安恒 CERT 评级为 2 级,CVSS3.1 评分为 8.1。 漏洞危害&#x…

基于python使用UDP协议对飞秋进行通讯—DDOS

基于飞秋的信息传输 声明:笔记的只是方便各位师傅学习知识,以下代码、网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。 老规矩,封面在文末! 飞秋介绍 (…

JAVA:组合模式(Composite Pattern)的技术指南

1、简述 组合模式(Composite Pattern)是一种结构型设计模式,旨在将对象组合成树形结构以表示“部分-整体”的层次结构。它使客户端对单个对象和组合对象的使用具有一致性。 设计模式样例:https://gitee.com/lhdxhl/design-pattern-example.git 2、什么是组合模式 组合模式…

LeetCode:222.完全二叉树节点的数量

跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:222.完全二叉树节点的数量 给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二…

MaxKB基于大语言模型和 RAG的开源知识库问答系统的快速部署教程

1 部署要求 1.1 服务器配置 部署服务器要求: 操作系统:Ubuntu 22.04 / CentOS 7.6 64 位系统CPU/内存:4C/8GB 以上磁盘空间:100GB 1.2 端口要求 在线部署MaxKB需要开通的访问端口说明如下: 端口作用说明22SSH安装…

基于指纹图像的数据隐藏和提取matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a 3.部分核心程序 (完整版代码包含详细中文注释和操作步骤视频&#xff09…

kubeadm一键部署K8S 集群架构

kubeadm一键部署K8S 集群架构(centos7) https://www.k8src.cn/ https://kubernetes.io/zh-cn/docs/home/ https://blog.csdn.net/m0_58709145/article/details/140128179 https://blog.csdn.net/jiaqijiaqi666/article/details/129745828 Kubeadm init报错[ERROR CRI]: contai…

直流电机驱动电路分享(HIP4082)

一、原理图分享 注意:M2_INA、M2_INB可直接接3.3V电平信号。 二、芯片介绍 1、HIP4082 HIP4082是一款高频驱动器,专为半桥和全桥应用而设计。它具有四个高/低侧驱动输出,可以提供高达100V的驱动电压。HIP4082还具有逻辑级输入和反馈输入&a…

企业版 YashanDB 23.2.4 分布式集群 数据库一主二备集群安装部署指南

一、概述 1.1 文档目标 本部分旨在为技术人员提供崖山数据库企业版 23.2 在 CentOS 7 x86_64 操作系统上进行安装部署操作的全面且清晰的指引。通过对系统架构、集群拓扑和部署需求的精确阐述,使读者能够在安装过程开始前形成系统的概念架构,为后续的详…

性能】JDK和Jmeter的安装与配置

一、JDK环境配置 1. 下载JDK 官网下载地址:http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html 选择对应系统的安装包,下载后安装,安装中记录JDK安装的地址,之后一直点击下一…