10-1 进程如何工作
本章将介绍以下命令:
- ps : 显示当前所有进程的运行情况。
- top : 实时显示当前所有任务的资源占用情况。
- jobs : 列出所有活动作业的状态信息。
- bg : 设置在后台中运行作业。
- fg : 设置在前台中运行作业。
- kill : 发送信号给某个进程。
- killall : 杀死指定名字的进程。
- shutdown : 关机或重启系统。
一、进程如何工作
父进程创建子进程
一个程序的运行可以触发其它程序的运行。
进程的有序进行
内核会保存每个进程的信息以便确保任务有序进行。 比如,每个进程将被分配一个称为进程ID(PID)的号码。进程ID是按递增的顺序来分配的,init 进程的PID始终为1。
1.使用 ps 命令查看进程信息
(0)ps命令简介
(1)语法格式
ps [选项]
'''
功能: 用来查看进程信息。
参数:
选项:
返回值:
'''
① 示例
Ⅰ.只输入 ps 命令
ps
输出结果列出了两个进程:进程 3260 和 进程 4001,分别对应 bash 命令和 ps 命令。 由此可见,在默认情况下,ps 命令输出的内容并不多,只是输出 和当前终端会话相关的进程信息。
为了获得更多的信息,需要添加一些选项。
Ⅱ.添加 x 选项
添加 x 选项(注意:这里没有前置连字符)将告诉 ps 命令显示所有的进程,而不需要关注它们是由哪个终端控制的,使用这个选项可以查看所有进程的列表信息。
ps x
由于系统中运行着大量的进程,所以 ps 命令将会输出一个长列表。 把 ps 命令的输出作为less 命令的输入的方法通常很管用,它可更方便地查看显示结果。有些选项组合也会产生很长的输出行,因此最大化终端仿真窗口很有用。
Ⅲ.选项组合 aux
这是一个常用的选项组合,注意不带前置连字符。 该选项组合将会显示属于每个用户的进程信息。
ps aux
Ⅳ.为何不带前置连字符?
不带前置连字符将使得命令以“BSD模式”运行。 ps命令的 Linux 版本可以模拟多种 UNIX 版本中 ps 程序的运行方式,使用这些选项将显示更多列的信息。
(2)ps 命令输出的字段信息
① PID(进程ID)
进程ID。
② TTY
代表了进程的控制终端(controlling terminal)。 是 teletype (电传打字机)的缩写。 ? 表示没有控制终端。
③ STAT(进程状态)
STAT 是 state 的缩写。 显示的是进程的当前状态。
状态 |
含义 |
---|---|
R |
运行状态。进程正在运行或者准备运行。 |
S |
睡眠状态。进程不在运行,而是在等待某事件发生,如键盘输入或者收到网络报文。 |
D |
不可中断的睡眠状态。进程在等待 I/O 操作,如硬盘驱动。 |
T |
暂停状态。进程被指示暂停(后续还可继续运行)。 |
Z |
无效或“僵尸”进程。子进程被终止,但是还没有被其父进程彻底释放掉。 |
< |
高优先级进程。进程可以被赋予更多的重要性,分配更多的CPU时间。进程的这一特性称为优先级。高优先级的进程被说成较不友好,是因为它将消耗更多的CPU时间,这样留给其它进程的CPU时间就会减少。 |
N |
低优先级进程。低优先级进程(友好进程)只有在其它更高优先级的进程使用完处理器后才能够获得使用处理器的时间。 |
这些进程状态后面可以带其它地字符来表示不同的特殊进程特性。
④ TIME
表示进程消耗的CPU时间总和(即进程的运行时间)。 回到示例Ⅰ中,可以看到 bash进程和 ps进程,没有使得计算机变得忙碌。
⑤ COMMAND
执行的命令。
(3)BSD模式下ps命令输出的列字段
标题 |
含义 |
---|---|
USER |
用户ID。表示该进程的所有者。 |
%CPU |
CPU 使用百分比。 |
%MEM |
内存使用百分比。 |
VSZ |
虚拟耗用内存大小。 |
RSS |
实际使用的内存大小。(即进程使用的物理内存RAM大小,以KB为单位。) |
START |
进程开启的时间。若数值超过 24 个小时,那么将使用日期来显示。 |
2.使用 top 命令动态查看进程信息
ps 命令可以显示有关机器运行情况的很多信息,但是它提供的只是在 ps 命令被执行时刻机器状态的一个快照。 要想查看机器运行情况的动态视图,可以使用 top 命令。
(0)top命令简介
top 命令将按照进程活动的顺序,以列表的形式持续更新显示系统进程的当前信息(默认每 3 秒更新一次)。 它主要用于查看系统最高(top)进程的运行情况,其名称也源自于此。 top 命令的显示内容包含2个部分:顶部显示系统总体状态信息,下面显示的是一张按CPU活动时间排序的进程情况表。
(1)语法格式
top
'''
功能: 用来查看进程信息。
参数:
选项:
返回值: 包含2部分: ①顶部显示**系统总体状态信息**。
②下面显示的是一张按CPU活动时间排序的进程情况表。
'''
下图,是我过了几秒钟的截图,可以看到是有区别的,这是因为 top 命令是实时更新。
① 顶部信息中的字段
行 |
字段 |
含义 |
---|---|---|
1 |
top |
程序名。 |
1 |
17:01:15 |
当前时间。 |
1 |
up 7:34 |
正常运行时间(uptime)。从机器最后一次启动开始计算的时间总数。在上例中,系统已经运行了大约7.5小时。 |
1 |
1 user |
有 1 个用户已登录。 |
1 |
load average: |
负载均值:指的是等待运行的进程数;即可共享CPU资源的处于可运行状态的进程数。显示的 3 个值分别对应不同的时间段:第1个对应的是前60秒的均值;第 2 个对应的是前 5 分钟的均值;第 3 个对应的是前 15 分钟的均值。该值小于 1.0 表示该机器并不忙。 |
2 |
任务(tasks) |
统计进程数及各个进程的状态信息。 |
3 |
2.7%us |
2.7%的CPU时间被用户进程占用(此指处于内核外的进程)。 |
3 |
0.7%sy |
0.7%的CPU时间被系统进程(即内核进程)占用。 |
3 |
0.0%ni |
0.0%的CPU时间被友好进程(即低优先级进程)占用。 |
3 |
96.7%id |
96.7%的CPU时间是空闲的。 |
3 |
0.0%wa |
0.0%的CPU时间用来等待 I/O 操作。 |
4 |
Mem: |
显示物理RAM(随机存取内存)的使用情况。 |
5 |
Swap: |
显示交换空间(虚拟内存)的使用情况。 |
(2)可接受键盘指令
top 命令可以接受许多键盘指令,其中最常用的有 2 个:
- 一个是h:输入后将显示程序的帮助页面。
- 另一个是 q:用来退出 top 命令(不输入 q 的话,不会返回shell提示符)。
- 开发 | 图片数据集太少?看我七十二变,Keras Image Data Augmentation 各参数详解
- linux过滤空文件的命令总结(r2笔记40天)
- shell脚本自动化采集性能sql(r2笔记39天)
- R语言与点估计学习笔记(EM算法与Bootstrap法)
- 开发 | 为个人深度学习机器选择合适的配置
- 阿里音乐流行趋势预测竞赛数据清洗整合——纯python
- 生产环境sql语句调优实战第二篇(r2第38天)
- 生产环境sql语句调优实战第三篇(r2笔记38天)
- 简单易学的机器学习算法——K-Means算法
- 通过shell脚本定位性能sql和生成报告(r2笔记37天)
- VXFS启用异步IO导致的严重问题(r2笔记56天)
- 通过sql语句分析足彩(r2笔记55天)
- 关于验证表中有无数据的方法比较(r2笔记54天)
- 海量数据迁移之分区并行抽取(r2笔记53天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 组复制安全 | 全方位认识 MySQL 8.0 Group Replication
- 那些年我们遇的bug
- Spring 里那么多种 CORS 的配置方式,到底有什么区别
- oracle 数据库:"ORA-01940: 无法删除当前连接的用户",解决办法
- 不要在Spring单元测试中使用 @Transactional注解
- OpenCV DNN模块官方教程(一)加载Caffe模型做图像分类
- Python爬虫之mongodb的聚合操作
- Linux中文输入法-搜狗输入法安装方法
- oracle 数据库问题:"ORA-01922: 必须指定 CASCADE 以删除...",原因及解决办法
- OpenCV DNN模块官方教程(二)YoloV4目标检测实例
- Python爬虫之mongodb的增删改查
- 恕我直言你可能真的不会java第2篇:Java Stream API?
- Python爬虫之mongodb的简单使用
- Java之美-死锁
- 恕我直言你可能真的不会java第4篇:Stream管道流Map操作