Linux的程序管理2:设置优先级,程序的查看与处理---ps命令详解与kill,killall,top,renice,nice搭配使用管理linux

前言

程序的管理除了前文说到的前后台执行,离线执行。还包括下面几个方面:
1:如何找到最耗费系统资源的程序? (使用top命令找到PID然后排查原因)
2:设置程序的优先级,让其被执行的概率增加。(renice nice)
3:如果由于程序写的不好,导致程序僵死,如何找到且处理? (查找CMD后面的defunct标志)
4:灵活以多种方式查找进程

常用命令及效果

ps -l 仅观察自己的 bash 相关程序

在这里插入图片描述其每一个字段的意思如下:

1F:代表这个程序旗标 (process flags),说明这个程序的总结权
限,常见号码有:
若为 4 表示此程序的权限为 root ;
若为 1 则表示此子程序仅进行复制(fork)而没有实际执行
(exec)。
2S:代表这个程序的状态 (STAT),主要的状态有:
R (Running):该程序正在运行中;
S (Sleep):该程序目前正在睡眠状态(idle),但可以被
唤醒(signal)。
D :不可被唤醒的睡眠状态,通常这支程序可能在等待 I/O
的情况(ex>打印)
T :停止状态(stop),可能是在工作控制(背景暂停)或
除错 (traced) 状态;
Z (Zombie):僵尸状态,程序已经终止但却无法被移除至
内存外。
3UID/PID/PPID:代表“此程序被该 UID 所拥有/程序的 PID 号码/
此程序的父程序 PID 号码”
4C:代表 CPU 使用率,单位为百分比;
5PRI/NI:Priority/Nice 的缩写,代表此程序被 CPU 所执行的优先
顺序,数值越小代表该程序越快被 CPU 执行。
6ADDR/SZ/WCHAN:都与内存有关,ADDR 是 kernel function,
指出该程序在内存的哪个部分,如果是个 running 的程序,一般
就会显示“ -/ SZ 代表此程序用掉多少内存 / WCHAN 表示目前
程序是否运行中,同样的, 若为 - 表示正在运行中。
7TTY:登陆者的终端机位置,若为远端登陆则使用动态终端接口
(pts/n);
8TIME:使用掉的 CPU 时间,注意,是此程序实际花费 CPU 运行
的时间,而不是系统时间;
9CMD:就是 command 的缩写,造成此程序的触发程序之指令为
何。


ps aux 观察系统所有程序

在这里插入图片描述 ps -l 与 ps aux 显示的项目并不相同!在 ps aux 显示
的项目中,各字段的意义为:

USER:该 process 属于那个使用者帐号的?
PID :该 process 的程序识别码。
%CPU:该 process 使用掉的 CPU 资源百分比;
%MEM:该 process 所占用的实体内存百分比;
VSZ :该 process 使用掉的虚拟内存量 (KBytes)
RSS :该 process 占用的固定的内存量 (KBytes)
TTY :该 process 是在那个终端机上面运行,若与终端机无关则
显示 ?,另外, tty1-tty6 是本机上面的登陆者程序,若为 pts/0 等
等的,则表示为由网络连接进主机的程序。
STAT:该程序目前的状态,状态显示与 ps -l 的 S 旗标相同
(R/S/T/ZSTART:该 process 被触发启动的时间;
TIME :该 process 实际使用 CPU 运行的时间。
COMMAND:该程序的实际指令为何?

以范例一的显示内容,显示出所有的程序: ps -lA

在这里插入图片描述

列出类似程序树的程序显示: ps axjf

在这里插入图片描述在这里插入图片描述可以看到,进程都以树的方式在显示。

显示进程树:pstree

大致用法如下

显示进程树。

  -a, --arguments     显示命令行参数
  -A, --ascii         使用 ASCII 行绘制字符
  -c, --compact-not   不要对完全相同的子树进行压缩
  -C, --color=类型    按照指定属性对进程上色
                      (age)
  -g, --show-pgids    显示进程组 ID;隐含启用 -c 选项
  -G, --vt100         使用 VT100 行绘制字符
  -h, --highlight-all 高亮显示当前进程和其所有祖先
  -H PID, --highlight-pid=PID
                      高亮显示指定 PID 对应的进程和其所有祖先
  -l, --long          不要截断长行
  -n, --numeric-sort  按照 PID 对输出进行排序
  -N 类型, --ns-sort=类型
                      按照指定命名空间类型对输出进行排序
                              (cgroup, ipc, mnt, net, pid, user, uts)
  -p, --show-pids     显示 PID;隐含启用 -c 选项
  -s, --show-parents  显示所选进程的父进程
  -S, --ns-changes    显示命名空间的变化
  -t, --thread-names  显示完整线程名称
  -T, --hide-threads  隐藏线程,只显示进程
  -u, --uid-changes   显示用户 IDUID)的变化
  -U, --unicode       使用 UTF-8(Unicode)的行绘制字符
  -V, --version       显示版本信息
  -Z, --security-context
                      显示 SELinux 安全上下文

  进程号 从指定进程号开始;默认为 1(init)
  用户   仅显示从指定用户的进程开始的进程树

显示效果如下。
在这里插入图片描述

动态观察程序的变化:top

相对于 ps 是撷取一个时间点的程序状态, top 则可以持续侦测程
序运行的状态!

选项与参数:
-d :后面可以接秒数,就是整个程序画面更新的秒数。默认是 5 秒;
-b :以批次的方式执行 top ,还有更多的参数可以使用喔!
通常会搭配数据流重导向来将批次的结果输出成为文件。
-n :与 -b 搭配,意义是,需要进行几次 top 的输出结果。
-p :指定某些个 PID 来进行观察监测而已。
在 top 执行过程当中可以使用的按键指令:
? :显示在 top 当中可以输入的按键指令;
P :以 CPU 的使用资源排序显示;
M :以 Memory 的使用资源排序显示;
N :以 PID 来排序喔!
T :由该 Process 使用的 CPU 时间累积 (TIME+) 排序。
k :给予某个 PID 一个讯号 (signal)
r :给予某个 PID 重新制订一个 nice 值。
q :离开 top 软件的按键。

将 signal 传送给某个工作 (%jobnumber) 或者是某个PID:kill

一般用法:
ps aux | grep ‘rsyslogd’ | grep -v ‘grep’| awk ‘{print $2}’
kill -1 ps aux | grep ‘rsyslogd’ | grep -v ‘grep’| awk ‘{print $2}’
kill -9 ps aux | grep ‘rsyslogd’ | grep -v ‘grep’| awk ‘{print $2}’
kill -15 ps aux | grep ‘rsyslogd’ | grep -v ‘grep’| awk ‘{print $2}’

批量/全部杀死某类进程:killall

  -e,--exact          对长名字要求严格匹配
  -I,--ignore-case    匹配进程名时忽略大小写
  -g,--process-group  杀死进程组而不是进程
  -y,--younger-than   杀死比指定<时间>年轻的进程
  -o,--older-than     杀死比指定<时间>年老的进程
  -i,--interactive    在杀死进程前要求确认
  -l,--list           列出所有的信号名
  -q,--quiet          不要打印抱怨信息
  -r,--regexp         将 "进程名" 视为扩展正则表达式
  -s,--signal 信号    发送指定 "信号" 而不是 SIGTERM
  -u,--user 用户      仅杀死指定 "用户" 的进程
  -v,--verbose        报告信号是否成功送出
  -V,--version        显示版本信息
  -w,--wait           等待进程死亡
  -n,--ns 进程号      匹配与指定<进程号>具有相同命名空间的进程
  -Z,--context 正则表达式 仅杀死含有指定上下文的进程
                          (必须在其他参数前使用)

用法:
范例一:给予 rsyslogd 这个指令启动的 PID 一个 SIGHUP 的讯号

killall -1 rsyslogd

如果用 ps aux 仔细看一下,若包含所有参数,则 /usr/sbin/rsyslogd -n 才是最完整的!

范例二:强制终止所有以 httpd 启动的程序 (其实并没有此程序在系统内)

killall -9 httpd

范例三:依次询问每个 bash 程序是否需要被终止运行!

killall -i -9 bash

Signal bash(13888) ? (y/N) n <==这个不杀!
Signal bash(13928) ? (y/N) n <==这个不杀!
Signal bash(13970) ? (y/N) n <==这个不杀!
Signal bash(14836) ? (y/N) y <==这个杀掉!
具有互动的功能!可以询问你是否要删除 bash 这个程序。要注意,若没有 -i 的参数,
所有的 bash 都会被这个 root 给杀掉!包括 root 自己的 bash 喔! _

设置进程优先级:renice

设置进程优先级有2种方式:
1:一开始执行程序就立即给予一个特定的 nice 值:用 nice 指令;
2:调整某个已经存在的 PID 的 nice 值:用 renice 指令。

范例一:用 root 给一个 nice 值为 -5 ,用于执行 vim ,并观察该程序!
[root@study ~]# nice -n -5 vim &
[1] 19865
[root@study ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 14836 14835 0 90 10 - 29068 wait pts/0 00:00:00 bash
4 T 0 19865 14836 0 85 5 - 37757 signal pts/0 00:00:00 vim
0 R 0 19866 14836 0 90 10 - 30319 - pts/0 00:00:00 ps
#原本的 bash PRI 为 90 ,所以 vim 默认应为 90。不过由于给予 nice 为 -5 ,因此 vim 的 PRI 降低了!RPI 与 NI 各减 5 !但不一定每次都是正好相同喔!因为核心会动态调整
kill -9 %1 <==测试完毕将 vim 关闭

范例二:找出自己的 bash PID ,并将该 PID 的 nice 调整到 -5
[root@study ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 14836 14835 0 90 10 - 29068 wait pts/0 00:00:00 bash
0 R 0 19900 14836 0 90 10 - 30319 - pts/0 00:00:00 ps
[root@study ~]# renice -5 14836
14836 (process ID) old priority 10, new priority -5
[root@study ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 14836 14835 0 75 -5 - 29068 wait pts/0 00:00:00 bash
0 R 0 19910 14836 0 75 -5 - 30319 - pts/0 00:00:00 ps

找到且处理僵尸进程或僵死进程!!

除此之外,我们必须要知道的是“僵尸 (zombie) ”程序是什
么? 通常,造成僵尸程序的成因是因为该程序应该已经执行完毕,
或者是因故应该要终止了, 但是该程序的父程序却无法完整的将该
程序结束掉,而造成那个程序一直存在内存当中。 如果你发现在某
个程序的 CMD 后面还接上 时,就代表该程序是僵尸程
序啦,例如:
使用 ps aux | grep defunct

apache 8683 0.0 0.9 83384 9992 ? Z 14:33 0:00 /usr/sbin/httpd

总结:

这也只是普通的管理进程。还可以通过其他方式观察。
比如:netstat lsof systemctl 等等,这些工具用途不同,各有优点。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MulterError: Field name missing 报错解决

Request POST /FileUpload/chunkApi/upload/mProjectNews/Images failed with status code 500. MulterError: Field name missing. 原因&#xff1a;Multer是基于Busboy解析的表单参数信息&#xff0c;经定位发现是解析表单中文本参数时出现了null&#xff0c;故收到MISSION_…

Unity DOTS技术(一)简介

文章目录 一.概述二.将会介绍的内容三.DOTS技术与传统方式的不同传统问题DOTS技术 四.插件安装 一.概述 传统的游戏开发中,如果有成千上万的物体在场景中运动,那么你一定会认为是疯了.但有了Dost技术这一些都将变成可能.如图场景中有10000个物体在同时运动,帧率即能保持在60Fp…

vmware workstation 17.0.0 ubuntu删除快照导致无法启动的问题打不开磁盘xxxxxxx或它所依赖的某个快照磁盘

在使用vmware workstation的时候 在我删除多余的快照的时候&#xff0c;发现删除快照后打不开虚拟机了&#xff0c; 提示&#xff1a; 打不开此虚拟磁盘的父磁盘打不开磁盘“D:\Virtual Machines\Ubuntu 64 位\Ubuntu 64 位-000003.vmdk”或它所依赖的某个快照磁盘。模块“Dis…

有开源软件,也有开源硬件?

开源软件或库有很多&#xff0c;例如 Linux 操作系统的内核 The Linux Kernel Archiveshttps://www.kernel.org/ 开源的各种Linux发行版本&#xff0c;Ubuntu 、CentOS等 Enterprise Open Source and Linux | Ubuntuhttps://ubuntu.com/ 开源的视觉函数库&#xff0c;OpenC…

虚拟化软件(VMWare、VB)异常最后解决手段

Version V0.0&#xff1a;20240601 Ini 前言 这里描述的是常规的解决办法还是无法解决的严重问题&#xff0c;比如”虚拟化软件(VMWare、VB)“启动”虚拟机“、和”CPU硬件加速“开启不了等问题。 一、安装了加速器、游戏平台、模拟器的电脑 解决办法&#xff1a; 把这些…

无限可能LangChain——构建一个简单的LLM应用程序

在本快速入门中&#xff0c;我们将向您展示如何构建一个简单的LLM应用程序。该应用程序将文本从英语翻译成另一种语言。这是一个相对简单的LLM应用程序——它只是一个LLM调用加上一些提示。尽管如此&#xff0c;这仍然是开始使用LangChain的好方法——只需一些提示和一个LLM调用…

Sentinel与Nacos强强联合,构建微服务稳定性基石的重要实践

一、简介 Sentinel 作为一款强大的流量控制组件&#xff0c;能够对系统入口流量进行精准控制&#xff0c;有效防止服务因突发流量冲击引起服务雪崩&#xff0c;进而导致服务瘫痪&#xff0c;确保服务的稳定性和可靠性。 Nacos 作为配置管理和服务发现平台&#xff0c;实现了配置…

数据库(15)——DQL分页查询

DQL分页查询语法 SELECT 字段列表 FROM 表名 LIMIT 起始索引&#xff0c;查询记录数; 注&#xff1a;起始索引从0开始&#xff0c;起始索引&#xff08;查询页码-1&#xff09;*每页显示记录数。 如果查询的是第一页&#xff0c;可以省略起始索引。 示例&#xff1a;查询第一页…

【NLP开发】Python实现聊天机器人(微信机器人)

&#x1f37a;NLP开发系列相关文章编写如下&#x1f37a;&#xff1a;1&#x1f388;【小沐学NLP】Python实现词云图&#x1f388;2&#x1f388;【小沐学NLP】Python实现图片文字识别&#x1f388;3&#x1f388;【小沐学NLP】Python实现中文、英文分词&#x1f388;4&#x1…

Nvidia Jetson/Orin +FPGA+AI大算力边缘计算盒子:美团小袋自动配送车

大型电商公司美团已选用NVIDIA Jetson AGX Xavier 平台&#xff0c;作为无人配送机器人核心AI算力。 美团点评是全球大型的按需食品配送公司&#xff0c;结合了Uber Eats、Yelp和Groupon的商业模式&#xff0c;与超过40万家本地企业开展合作。他们推出了小袋自动配送车&#…

LeetCode---哈希表

242. 有效的字母异位词 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。 代码示例&#xff1a; //时间复杂度: O(n) //空间复杂度: O(1) c…

【NOIP提高组】进制转换

【NOIP提高组】进制转换 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 我们可以用这样的方式来表示一个十进制数&#xff1a;将每个阿拉伯数字乘以一个以该数字所处位置的&#xff08;值减1&#xff09;为指数&#xff0c;以 10 为底数的幂…

Java web应用性能分析之【java进程问题分析概叙】

Java web应用性能分析概叙-CSDN博客 Java web应用性能分析之客户端慢_有的客户端跑java应用特别慢-CSDN博客 Java web应用性能分析服务端慢之前端页面慢_前端页面加载性能分析-CSDN博客 Java web应用性能分析服务端慢之Nginx慢_前端nginx请求比直接连接后台慢很多-CSDN博客 …

【安规介绍】

文章目录 一、基础知识安规上的六类危险的防护&#xff1a;安全电压漏电流接触电流能量问题&#xff1a;火灾问题&#xff1a;热问题结构问题阻燃等级绝缘等级&#xff1a;对接地系统的要求&#xff1a;结构要求:电气要求&#xff1a; 二、设计的关键电气绝缘距离电气爬电距离:…

四足机器人步态仿真(三)四足机器人基础步态仿真

观前提醒&#xff0c;本章主要内容为分析四足机器人步态实现和姿态控制&#xff0c;碰撞体积等程序 步态效果&#xff1a; 一、完整代码如下 # -*- coding: utf-8 -*-import pybullet as pimport timeimport numpy as npp.connect(p.GUI)p.createCollisionShape(p.GEOM_PLANE…

插入排序(直接插入排序、折半插入排序、希尔排序)的性能分析

目录 前言 插入排序 直接插入排序性能分析 折半插入排序性能分析 希尔排序性能分析 前言 本篇文章主要是总结插入排序的性能分析&#xff0c;具体的概念、算法、排序过程&#xff0c;我前面的文章有写&#xff0c;在这里就不再过多赘述了。 插入排序 插入排序是一种简单直…

MYSQL数据库细节详细分析

MYSQL数据库的数据类型(一般只需要用到这些) 整型类型&#xff1a;用于存储整数值&#xff0c;可以选择不同的大小范围来适应特定的整数值。 TINYINTSMALLINTMEDIUMINTINTBIGINT 浮点型类型&#xff1a;用于存储带有小数部分的数值&#xff0c;提供了单精度&#xff08;FLOA…

2-1RT-Thread线程管理-笔记

2-1RT-Thread线程管理-笔记 其中系统线程由内核创建&#xff0c;如main函数和空闲线程都属于系统线程&#xff0c;而用户线程是由应用程序所创建的。 对于资源较大的MCU可以适当设计较大的线程栈&#xff0c;也可以在初始化时设置一个具体的数值&#xff0c;如1K或2K字节。…

【JavaEE 进阶(二)】Spring MVC(下)

❣博主主页: 33的博客❣ ▶️文章专栏分类:JavaEE◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你了解更多进阶知识 目录 1.前言2.响应2.1返回静态界面2.2返回数据2.3返回HTML代码 3.综合练习3.1计算器3.2用户登…

Python 技能提升(二)

理想的类结构 Property装饰器 # 传统写法 class Square1:def __init__(self):self.__side Nonedef get_side(self):return self.__sidedef set_side(self, side):assert side > 0, 边长不能为负数&#xff01;self.__side sidedef del_side(self):# del self.__sideself.…