Linux进程管理

进程是操作系统中正在执行的一个命令或程序。在 Linux 系统当中,每当触发任何一个事件时,系统都会将它定义成为一个进程,并且给予这个进程一个ID,称为PID,同时根据触发进程用户的权限给予这个PID一组有效的权限设置。在有些命令执行结束后进程会终结,也有一些命令启动后会常驻在系统中,被称为常驻内存进程。

查看进程

在linux中最常用的查看进程的命令为ps命令,比如ps -l命令能查看当前bash 下的相关进程全部信息。

ps命令的选项:

a:显示一个终端的所有进程,除会话引线外;

u:显示进程的归属用户及内存的使用情况;

x:显示没有控制终端的进程;

-l:长格式显示更加详细的信息;

-e:显示所有进程;

它的部分选项不能加入"-",比如命令"ps aux",其中"aux"是选项,但是前面不能带“-”。

[root@localhost ~]# ps aux

#查看系统中所有的进程

USER PID %CPU %MEM  VSZ  RSS   TTY STAT START TIME COMMANDroot   1  0.0  0.2 2872 1416   ?   Ss   Jun04 0:02 /sbin/initroot   2  0.0  0.0    0    0   ?    S   Jun04 0:00 [kthreadd]root   3  0.0  0.0    0    0   ?    S   Jun04 0:00 [migration/0]root   4  0.0  0.0    0    0   ?    S   Jun04 0:00 [ksoftirqd/0]

ps aux的输出信息含义:

VSZ: 该进程占用虚拟内存的大小,单位为 KB。

RSS: 该进程占用实际物理内存的大小,单位为 KB。

TTY: 该进程是在哪个终端运行的。其中:

        tty1 ~ tty7 代表本地控制台终端(可以通过 Alt+F1 ~ F7 快捷键切换不同的终端)

       tty1~tty6 是本地的字符界面终端,tty7 是图形终端。

       pts/0 ~ 255 代表虚拟终端,一般是远程连接的终端,第一个远程连接占用 pts/0,第二个远程连接占用 pts/1,依次增长。

STAT: 进程状态。常见的状态有以下几种:

-D:不可被唤醒的睡眠状态,通常用于 I/O 情况。

-R:该进程正在运行。

-S:该进程处于睡眠状态,可被唤醒。

-T:停止状态,可能是在后台暂停或进程处于除错状态。

-W:内存交互状态(从 2.6 内核开始无效)。

-X:死掉的进程(应该不会出现)。

-Z:僵尸进程。进程已经中止,但是部分程序还在内存当中。

-<:高优先级(以下状态在 BSD 格式中出现)。

-N:低优先级。

-L:被锁入内存。

-s:包含子进程。

-l:多线程(小写 L)。

-+:位于后台。

COMMAND: 产生此进程的命令名。

ps-le的输出信息含义:

ps-le可以比ps aux看到更多的详细信息,但基本功能与ps aux一致。

PRI:进程的优先级,数值越小,该进程的优先级越高,越早被 CPU 执行

NI:进程的优先级,数值越小,该进程越早被执行。

ADDR:该进程在内存的哪个位置。

SZ:该进程占用多大内存。

top命令

top 命令可以动态地持续监听进程的运行状态,与此同时,该命令还提供了一个交互界面,用户可以根据需要,人性化地定制自己的输出,进而更清楚地了进程的运行状态。

top命令的选项:

· -d 秒数:指定 top 命令每隔几秒更新。默认是 3 秒。

· -b:使用批处理模式输出。一般和"-n"选项合用,用于把 top 命令重定向到文件中。

· -n 次数:指定 top 命令执行的次数。一般和"-"选项合用。

· -p 进程PID:仅查看指定 ID 的进程。

· -s:使 top 命令在安全模式中运行,避免在交互模式中出现错误。

· -u 用户名:只监听某个用户的进程。

在 top 命令的显示窗口中,还可以使用如下按键,进行一下交互操作:

· ? 或 h:显示交互模式的帮助。

· P:按照 CPU 的使用率排序,默认就是此选项。

· M:按照内存的使用率排序。

· N:按照 PID 排序。

· T:按照 CPU 的累积运算时间排序,也就是按照 TIME+ 项排序。

· k:按照 PID 给予某个进程一个信号。一般用于中止某个进程,信号 9 是强制中止的信号。

· r:按照 PID 给某个进程重设优先级(Nice)值。

· q:退出 top 命令。

top命令例子:

[root@localhost ~]# toptop - 12:26:46 up 1 day, 13:32, 2 users, load average: 0.00, 0.00, 0.00Tasks: 95 total, 1 running, 94 sleeping, 0 stopped, 0 zombieCpu(s): 0.1%us, 0.1%sy, 0.0%ni, 99.7%id, 0.1%wa, 0.0%hi, 0.1%si, 0.0%stMem: 625344k total, 571504k used, 53840k free, 65800k buffersSwap: 524280k total, 0k used, 524280k free, 409280k cachedPID   USER PR NI VIRT  RES  SHR S %CPU %MEM   TIME+ COMMAND19002 root 20  0 2656 1068  856 R  0.3  0.2 0:01.87 top1     root 20  0 2872 1416 1200 S  0.0  0.2 0:02.55 init2     root 20  0    0    0    0 S  0.0  0.0 0:00.03 kthreadd3     root RT  0    0    0    0 S  0.0  0.0 0:00.00 migration/04     root 20  0    0    0    0 S  0.0  0.0 0:00.15 ksoftirqd/05     root RT  0    0    0    0 S  0.0  0.0 0:00.00 migration/06     root RT  0    0    0    0 S  0.0  0.0 0:10.01 watchdog/07     root 20  0    0    0    0 S  0.0  0.0 0:05.01 events/08     root 20  0    0    0    0 S  0.0  0.0 0:00.00 cgroup

其中第一行的load average: 0.00,0.00,0.00表示系统在之前 1 分钟、5 分钟、15 分钟的平均负载。如果 CPU 是单核的,则这个数值超过 1 就是高负载:如果 CPU 是四核的,则这个数值超过 4 就是高负载。

第二行 Tasks: 95 total, 1 running, 94 sleeping, 0 stopped, 0 zombie

表示进程信息,正在运行的进程、睡眠的进程、正在停止的进程数等。

Cpu(s): 0.1%us, 0.1%sy, 0.0%ni, 99.7%id, 0.1%wa, 0.0%hi, 0.1%si, 0.0%st

第三行表示cpu信息:

  •    us表示用户模式占用的cpu百分比
  •    sy表示系统占用百分比
  •    ni表示改变过优先级的用户进程占用cpu百分比
  •    id表示空闲cpu占用的百分比
  •     wa表示等待输入/输出的进程占用cpu百分比
  •     hi表示硬中断请求服务占用cpu百分比
  •     si表示软中断请求服务占用百分比。

第四行 Mem: 625344k total, 571504k used, 53840k free, 65800k buffers

表示物理内存信息,total,used,free,buffer表示内容已经很明确。

第五行 Swap: 524280k total, 0k used, 524280k free, 409280k cached

表示虚拟内存使用信息。

top的第二部分输出与ps命令类似:

VIRT表示该进程占用虚拟内存大小

RES表示占用物理内存大小。

Linux进程的优先级

在 Linux 系统中,表示进程优先级的有两个参数:Priority 和 Nice。

前面提到了用ps-le命令和top命令都可以查看进程的优先级,PRI 代表 Priority,NI 代表 Nice。这两个值都表示优先级,数值越小代表该进程越优先被 CPU 处理。不过,PRI值是由内核动态调整的,用户不能直接修改

我们只能通过修改 NI(Nice) 值来影响 PRI 值,间接地调整进程优先级。

PRI和NI 的关系如下:PRI (最终值) = PRI (原始值) + NI。

我们修改 NI 的值就可以改变进程的优先级即可。

NI 值越小,进程的PRI就会降低,该进程就越优先被CPU处理;

反之,NI值越大,进程的PRI值就会増加,该进程就越靠后被 CPU处理。
修改NI值时有几个注意事项:

NI 范围是 -20~19。

普通用户调整NI值的范围是0~19,而且只能调整自己的进程。

普通用户只能调高NI值,而不能降低。如原本NI值为0,则只能调整为大于0。

只有root用户才能设定进程NI值为负值,而且可以调整任何用户的进程。

调整进程的优先级

可以使用nice命令和renice命令:

nice命令可以给要启动的进程赋予NI值,但是不能修改已运行进程的NI值。

nice命令格式如下:

[root@localhost ~] # nice [-n NI值] 命令

同nice命令相反,renice 命令可以在进程运行时修改其NI 值,从而调整优先级。

renice 命令格式如下:

[root@localhost ~] # renice [优先级] PID

父进程&子进程

当Linux启动的时候,init 是系统创建的第一个进程,这一进程会一直存在,直到我们关闭计算机。所有其他的进程都是由init进程衍生出来的。

当我们登录系统后,会取得一个bash shell,然后我们利用这个bash提供的接口去执行另一个命令,例如bash或者ps等。那些另外执行的命令也会被触发成为PID,那个后来执行的命令产生的PID就是“子进程”,而原本的bash环境下,就称为“父进程”了。老进程成为新进程的父进程(parent process),而相应的,新进程就是老的进程的子进程(child process)。

一个进程除了有一个PID之外,还会有一个PPID(parent PID)来存储的父进程PID。如果我们循着PPID不断向上追溯的话,总会发现其源头是 init 进程

fork & exec

当计算机开机的时候,内核只建立了一个 init 进程。Linux kernel 并不提供直接建立新进程的系统调用。剩下的所有进程都是init进程通过fork机制建立的

新的进程要通过老的进程复制自身得到,这就是fork。

fork是一个系统调用。进程存活于内存中。

每个进程都在内存中分配有属于自己的一片空间 (内存空间,包含栈、堆、全局静态区、文本常量区、程序代码区)。

当一个程序调用 fork 的时候,实际上就是将上面的内存空间,又复制出来一个,构成一个新的进程,并在内核中为该进程创建新的附加信息 (比如新的 PID,而PPID为原进程的PID)。

此后,两个进程分别地继续运行下去。新的进程和原有进程有相同的运行状态(相同的变量值,相同的指令…)。我们只能通过进程的附加信息来区分两者。
程序调用exec的时候,进程清空自身的内存空间,并根据新的程序文件重建程序代码、文本常量、全局静态、堆和栈(此时堆和栈大小都为 0),并开始运行。

参考资料:

1. C语言中文网

2. 鸟哥私房菜

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

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

相关文章

【PHP】简记问题:使用strtotime(‘-1 month‘, time)获取上个月第一天时间戳出错

发生场景 在7月31号是查看统计上个月订单购买总金额&#xff0c;查询结果为0 $preMonthStart strtotime(date(Ym01, strtotime("-1 month"))); $curMonthStart strtotime(date(Ym01)); # 统计上月份实际订单金额 $sql "SELECT count(money) FROM orders WH…

《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(17)-Fiddler如何充当第三者再识AutoResponder标签-下

1.简介 上一篇宏哥主要讲解的一些在电脑端的操作和应用&#xff0c;今天宏哥讲解和分享一下&#xff0c;在移动端的操作和应用。其实移动端和PC端都是一样的操作&#xff0c;按照宏哥前边抓取移动端包设置好&#xff0c;就可以开始实战了。 2.界面功能解析 根据下图图标注位…

Vue基本语法

1. 官网&#xff1a; Vue.js - 渐进式 JavaScript 框架 | Vue.js (vuejs.org) 一、示例代码 如下代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible&q…

【Coppeliasim C++】焊接机械臂仿真

项目思维导图 该项目一共三个demo&#xff1a; 机械臂末端走直线 2. 变位机转台转动 3.机械臂末端多点样条运动 笔记&#xff1a; 基于等级的蚁群系统在3D网格地图中搜索路径的方法: 基于等级的蚁群系统(Hierarchical Ant Colony System,HACS)是一种改进的蚁群优化算法。它在传…

深度学习实战44-Keras框架下实现高中数学题目的智能分类功能应用

大家好,我是微学AI ,今天给大家介绍一下深度学习实战44-Keras框架实现高中数学题目的智能分类功能应用,该功能是基于人工智能技术的创新应用,通过对数学题目进行智能分类,提供个性化的学习辅助和教学支持。该功能的实现可以通过以下步骤:首先,采集大量的高中数学题目数据…

一百三十八、ClickHouse——使用clickhouse-backup备份ClickHouse库表

一、目标 使用clickhouse-backup在本地全库备份ClickHouse的数据库 二、前提 已经安装好clickhouse-backup 注意&#xff1a;由于之前同事已经按照好clickhouse-backup&#xff0c;所以我就没有安装 如有需要请参考其他人的博客安装一下&#xff0c;下面是我认为比较好的一…

分解质因子,将一个不小于2的整数分解质因数,例如,输入90,则输出:90=2*3*3*5

假设一个不小于2的整数n&#xff0c;对从2开始的自然数k&#xff0c;这个试探它是否是整数n的一个因子&#xff0c;如果是&#xff0c;则输出该因子&#xff0c;并将n/k的结果赋给n&#xff08;接下来只需要对n除以已经找到的因子之后的结果继续找因子&#xff09;。如果n的值不…

基于 STM32+FPGA 的通用工业控制器设计(一)系统方案设计

本章首先介绍了现有 PLC 系统的概况&#xff0c;然后提出了本文设计的通用工业控制器的 整体方案架构&#xff0c;分析了硬件和软件上需要实现的功能&#xff0c;最后对各部分功能进行分析并提 出具体的实现方案。 2.1 PLC 系统简介 可编程逻辑控制器&#xff08; Progra…

30天p小白学python-第三天(面向对象编程基础-进阶)

面向对象编程基础 活在当下的程序员应该都听过"面向对象编程"一词,也经常有人问能不能用一句话解释下什么是"面向对象编程",我们先来看看比较正式的说法。 "把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class)…

eventBus使用遇到的坑

**问题&#xff1a;**通过eventBus传递的参数&#xff0c;在子组件的methods中无法通过this.使用。 **思路&#xff1a;**考虑组件方法的执行顺序&#xff08;vue生命周期执行顺序&#xff09; **解决办法&#xff1a;**在传递参数的组件外 this.$nextTick this.$nextTick(() …

Spring 类型安全的配置属性

使用 Value("${property}") 注解来注入配置属性有时会很麻烦&#xff0c;特别是当你要处理多个属性或你的数据是分层的。 Spring Boot提供了一种处理属性的替代方法&#xff0c;让强类型的Bean管理和验证你的应用程序的配置。 另请参见Value 和类型安全配置属性之间的…

Android 面试题 避免OOM(内存优化)三

&#x1f525; OOM介绍&#xff08;out of memory 内存溢出&#xff09;&#x1f525; Android和java中都会出现由于不良代码引起的内存泄露&#xff0c;为了使Android应用程序能够快速高效的运行&#xff0c;Android每个应用程序都会有专门Dalvik虚拟机实例来运行&#xff0c;…

【机器学习】机器学习中的“本体”概念

一、说明 在机器学习中&#xff0c;本体越来越多地用于提供基于相似性分析和场景知识的 ML 模型。 在传统的基于标签的定义中&#xff0c;对象往往是孤立的&#xff0c;可扩展性差&#xff0c;存在重复的可能性&#xff0c;对象之间的关系无法体现。在基于本体的定义中&#xf…

4_Apollo4BlueLite电源管理

1.Cortex-M4 Power Modes Apollo4BlueLite支持以下4种功耗模式&#xff1a; ▪ High Performance Active (not a differentiated power mode for the Cortex-M4) ▪ Active ▪ Sleep ▪ Deep Sleep &#xff08;1&#xff09;High Performance Mode 高性能模式不是arm定…

【深度学习】以图搜索- 2021sota repVgg来抽取向量 + facebook的faiss的做特征检索, 从环境搭建到运行案例从0到1

文章目录 前言安装小试牛刀用repVgg抽取向量构建Faiss索引进行相似性搜索本项目延伸其它项目拓展总结 前言 Faiss的全称是Facebook AI Similarity Search。 这是一个开源库&#xff0c;针对高维空间中的海量数据&#xff0c;提供了高效且可靠的检索方法。 暴力检索耗时巨大&a…

最全的3D动画软件介绍来了!良心总结9款3D动画制作必备软件

现在&#xff0c;市面上流行着的3D动画软件如此之多&#xff0c;以至于很难敲定到底哪一款更适合自己或自己的团队。本篇文章带来了一些热门的、被视为行业标准的3D动画软件的介绍&#xff0c;帮助您更好地做出选择。 不仅如此&#xff0c;您还能从文章中了解到在数字内容创建…

html/javascript-表格的创建和使用

html中表格的创建和使用 一 摘要二 使用html table标签创建表格&#xff08;在html文件中&#xff09;三 使用javascript创建表格&#xff08;在js文件中&#xff09;四 表格属性的设置&#xff1a;4.1. 右边框的设置&#xff1a;4.2. 只给表格单元格加右边框4.3. 动态设置右边…

费舍尔线性分辩分析(Fisher‘s Linear Discriminant Analysis, FLDA)

费舍尔线性分辩分析(Fisher’s Linear Discriminant Analysis, FLDA) 目录 费舍尔线性分辩分析(Fishers Linear Discriminant Analysis, FLDA)1. 问题描述2. 二分类情况3. 多分类情况4. 代码实现4.1 二分类情况4.2 多分类情况 5. 参考资料 1. 问题描述 为解决两个或多个类别的…

PS - Photoshop 抠图与剪贴蒙版功能与 Stable Diffusion 重绘

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/131978632 Photoshop 的剪贴蒙版是一种将上层图层的内容限制在下层图层的形状范围内的方法&#xff0c;也就是说&#xff0c;上层图层只能在下层图…

【备战csp-j】 csp常考题型详解(1)

一.计算机基础知识 1. 微型计算机的问世是由于( ) 的出现。 A.中小规模集成电路 B.晶体管电路 C.(超)大规模集成电路 D.电子管电路 答案&#xff1a; C 解析&#xff1a; 年代 元件 第一代 1946&#xff0d;1958 电子管 第二代 1959&#xff0d;1964 晶体管 …