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.mzph.cn/news/846124.shtml

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

相关文章

Leetcode 第 397 场周赛题解

Leetcode 第 397 场周赛题解 Leetcode 第 397 场周赛题解题目1&#xff1a;3146. 两个字符串的排列差思路代码复杂度分析 题目2&#xff1a;思路代码复杂度分析 题目3&#xff1a;3148. 矩阵中的最大得分思路代码复杂度分析 题目4&#xff1a;3149. 找出分数最低的排列思路代码…

“论软件的可靠性评价”必过范文,突击2024软考高项论文

论文部分 摘要 2023年03月&#xff0c;我参与了某艺术品公司线上拍卖管理平台的研发。该项目的目标是建立一个互联网在线拍卖平台&#xff0c;用户可以通过手机或PC浏览器进入拍卖平台&#xff0c;对喜欢的拍品进行参拍出价。平台提供了在线支付、在线出价、保证金管理、拍品…

php fpdf使用记录

使用composer安装fpdf > composer require setasign/fpdf简单创建一个pdf文件并输出下载 //fpdf版本&#xff1a;&quot;setasign/fpdf&quot;: &quot;^1.8&quot;, // 创建PDF实例 $pdf new \FPDF();// 设置文档信息 $pdf->SetAuthor(Your Name); $pdf-…

深入解析力扣171题:Excel表列序号(进制转换法详解及模拟面试问答)

在本篇文章中&#xff0c;我们将详细解读力扣第171题“Excel表列序号”。通过学习本篇文章&#xff0c;读者将掌握如何使用多种方法来解决这一问题&#xff0c;并了解相关的复杂度分析和模拟面试问答。每种方法都将配以详细的解释和ASCII图解&#xff0c;以便于理解。 问题描述…

Android开机动画的结束过程BootAnimation(基于Android10.0.0-r41)

文章目录 Android 开机动画的结束过程BootAnimation(基于Android10.0.0-r41) Android 开机动画的结束过程BootAnimation(基于Android10.0.0-r41) 路径frameworks/base/cmds/bootanimation/bootanimation_main.cpp init进程把我们的BootAnimation的二进制文件拉起来了&#xf…

iOS开发中的sceneDidEnterBackground和applicationDidEnterBackground

在 iOS 应用开发中&#xff0c;sceneDidEnterBackground 和 applicationDidEnterBackground 是两个不同的生命周期方法&#xff0c;它们分别属于 UISceneDelegate 和 UIApplicationDelegate&#xff0c;用于处理应用程序或场景进入后台时的逻辑。以下是它们的区别和用法&#x…

字符串和字节串

字符串和字节串 在 Python 中,字符串(String)和字节串(Byte String)是两种不同的数据类型。 字符串(String) 字符串是一种文本数据类型,它可以包含 Unicode 字符。Python 的字符串是使用 Unicode 编码的,可以包含任何语言的字符。 例如: s = "hello" …

YOLOv5改进 | 添加注意力篇 | 利用YOLOv10提出的PSA注意力机制助力YOLOv5有效涨点(附代码 + 详细修改教程)

一、本文介绍 本文给大家带来的改进机制是YOLOv10提出的PSA注意力机制&#xff0c;自注意力在各种视觉任务中得到了广泛应用&#xff0c;因为它具有显著的全局建模能力。然而&#xff0c;自注意力机制表现出较高的计算复杂度和内存占用。为了解决这个问题&#xff0c;鉴于注意…

一个可以自动生成随机区组试验的excel VBA小程序

在作物品种区域试验时&#xff0c;通常会采用随机区组试验设计&#xff0c;特制作了一个可以自动生成随机区组试验的小程序。excel参数界面如下&#xff1a; 参数含义如下&#xff1a; 1、生成新表的名称&#xff1a;程序将新建表格&#xff0c;用于生成随机区组试验。若此处为…

2024年3月电子学会Python编程等级考试(四级)真题题库

2024年3月青少年软件编程Python等级考试&#xff08;四级&#xff09;真题试卷 题目总数&#xff1a;38 总分数&#xff1a;100 选择题 第 1 题 单选题 运行如下Python代码&#xff0c;若输入整数3&#xff0c;则最终输出的结果为&#xff1f;&#xff08; &#xff…

java动态获取实体类字段的方法

1.使用反射&#xff08;Reflection&#xff09;API来动态地获取实体类的字段 在Java中&#xff0c;我们可以使用反射&#xff08;Reflection&#xff09;API来动态地获取实体类的字段。以下是一个详细的代码示例&#xff0c;演示了如何获取一个实体类的所有字段&#xff1a; …

arm cortex-m架构 SVC指令详解以及其在freertos的应用

1. 前置知识 本文基于arm cortex-m架构描述&#xff0c; 关于arm cortex-m的一些基础知识可以参考我另外几篇文章&#xff1a; arm cortex-m 架构简述arm异常处理分析c语言函数调用规范-基于arm 分析 2 SVC指令 2.1 SVC指令位域表示 bit15 - bit12&#xff1a;条件码&#…

SOFA-RPC学习记录

文章目录 需求分析模块划分微服务模块交互模块 可拓展架构插件机制 功能分析交互模块 学习微服务模块交互模块 dubbo与nacos集成学习Nacos配置中心实战 dubbo与apollo集成学习配置中心组件与k8s的抉择参考资料 结论 本报告旨在深入学习SOFA-RPC框架&#xff0c;特别是其动态配置…

LeetCode 每日一题 2024/5/27-2024/6/2

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 5/27 2028. 找出缺失的观测数据5/28 2951. 找出峰值5/29 2981. 找出出现至少三次的最长特殊子字符串 I5/30 2982. 找出出现至少三次的最长特殊子字符串 II5/31 2965. 找出缺…

Linux综合实践(Ubuntu)

目录 一、配置任务 1.1 配置该服务器的软件源为中科大软件源 1.2 安装相关软件openssh-server和vim 1.3 设置双网卡&#xff0c;网卡1为NAT模式&#xff0c;网卡2为桥接模式(桥接模式下&#xff0c;使用静态ip&#xff0c;该网卡数据跟实验室主机网络设置相似&#xff0c;除…

如何搜索[仅有1个文件]或[指定个数范围、名称、类型文件等复杂情况]的文件夹

首先&#xff0c;需要用到的这个工具&#xff1a; 度娘网盘 提取码&#xff1a;qwu2 蓝奏云 提取码&#xff1a;2r1z 打开工具&#xff0c;切换到批量复制板块&#xff0c;用Ctrl5可以快速切换 然后鼠标移动到工具的贴边的右侧&#xff0c;不是移出工具外面&#xff0c;还在…

【赠书第22期】AI绘画全面精通

文章目录 前言 1 AI绘画基础知识 2 AI绘画技术应用 2.1 风格迁移 2.2 自动绘画 2.3 辅助绘画 3 AI绘画发展前景 3.1 艺术创作领域的变革 3.2 跨领域融合与创新 3.3 个性化艺术创作的普及 4 结语 5 推荐图书 6 粉丝福利 前言 随着科技的飞速发展&#xff0c;人工智…

自学 Java 怎么入门?

关于自学 Java 如何入门这一重要课题&#xff0c;在此为大家进行详细阐述。 在此之前&#xff0c;如果大家有兴趣的话&#xff0c;可以看看我自己精心整理的嵌入式入门资料&#xff0c;这些资料将全部免费送给大家。其中包含了编程教学内容、详细的视频讲解、实用的数据库资料…

锅炉智能制造工厂工业物联数字孪生平台,推进制造业数字化转型

在制造业快速发展的今天&#xff0c;数字化转型已经成为企业提升竞争力的关键途径。锅炉智能制造工厂工业物联数字孪生平台&#xff0c;作为一种创新的技术解决方案&#xff0c;正以其独特的优势&#xff0c;为制造业的数字化转型提供强大动力。锅炉智能制造工厂工业物联数字孪…