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,一经查实,立即删除!

相关文章

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

论文部分 摘要 2023年03月&#xff0c;我参与了某艺术品公司线上拍卖管理平台的研发。该项目的目标是建立一个互联网在线拍卖平台&#xff0c;用户可以通过手机或PC浏览器进入拍卖平台&#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…

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

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

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

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

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;特别是其动态配置…

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;为制造业的数字化转型提供强大动力。锅炉智能制造工厂工业物联数字孪…

libevent源码跨平台编译(windows/macos/linux)

1.windows编译: 克隆: git clone https://github.com/libevent/libevent.git 克隆成功 生成makefile 生成成功 默认不支持OpenSSL,MbedTLS,ZLIB这三个库 编译: cmake --build . --config release

深入分析 Android Service (完)

文章目录 深入分析 Android Service (完)1. Service 的生命周期管理2. Service 的生命周期方法2.1 onCreate()2.2 onStartCommand(Intent intent, int flags, int startId)2.3 onBind(Intent intent)2.4 onUnbind(Intent intent)2.5 onRebind(Intent intent)2.6 onDestroy() 3.…

子集树与排列树的构造

排列树的构造&#xff1a; 无重复画法&#xff1a;一条线前面出现的不再出现。 有重复画法&#xff1a;一条线前面出现的不再出现&#xff0c;如果仅仅只是相似可以出现&#xff1b;兄弟不能相似。 目标函数是&#xff1a;cnt 总元素个数分支策略是全遍历&#xff0c;不过存…

二级指针简单介绍

我们之前学习的&#xff1a;变量的地址是存入指针变量中的&#xff0c;然而指针变量也是变量&#xff0c;是变量就有地址&#xff0c;那么指针变量的地址存放在哪里 &#xff1f; 这也就是二级指针 #include<stdio.h> int main() {int a10;int*p&a;int**pp&p;re…

微软如何打造数字零售力航母系列科普12 - 使用Microsoft Fabric将客户数据带入人工智能时代

【世界上充斥着数据&#xff0c;在过去的2年里&#xff0c;我们都看到了人工智能如何有潜力彻底改变我们的日常业务。人们对利用生成性人工智能体验的力量的需求越来越大&#xff0c;但这样做需要一个干净的数据庄园&#xff0c;而且可能会因为各种技术堆栈、分散的团队和无处不…

如何让Google快速收录?

要让Google快速收录你的网站&#xff0c;可以考虑使用GSI服务&#xff0c;这是一种专门设计来加速网站被Google搜索引擎收录的服务&#xff0c;下面详细解释GSI服务的基本原理和具体好处&#xff1a; GSI服务通过一种名为GPC爬虫池的系统实现&#xff0c;这个系统是基于对Goog…

eBPF可观测之网络流量控制和管理traffic control浅尝

目录 工程背景 环境准备 安装工具​​​ 安装依赖包 安装C依赖库 操作步骤 目录结构 代码展示 效果展示 拓展提升 工程背景 首先发表一个"暴论" eBPF在可观测方面的应用&#xff0c;就是各种google。 不需要学习内核&#xff0c;只要掌握ebpf开发套路。…

什么是TLAB?

这个得从内存申请说起。 一般而言生成对象需要向堆中的新生代申请内存空间&#xff0c;而堆又是全局共享的&#xff0c;像新生代内存又是规整的&#xff0c;是通过一个指针来划分的。 内存是紧凑的&#xff0c;新对象创建指针就右移对象大小size即可&#xff0c;这叫指针加法…