Linux系统小技巧(5):如何列出和排序正在读写的进程?

简介: 如何利用经典UNIX工具列出正在读写的进程并且排序之?

哪些进程这在对写?试试iotop。但是有时候并不方便安装部署iotop,而且iotop的输出也容易进一步分析处理。

那么,有没有其他方式方便做到这一点呢?有。在说出答案前,我们先看看一个实际/proc/<pid>/io文件的内容

rchar: 951610978
wchar: 1180044763
syscr: 133011
syscw: 120643
read_bytes: 77246464
write_bytes: 735604736
cancelled_write_bytes: 98304

根据内核文档,rcharwchar即是进程已经提交但还没有完成的的读写操作要处理的内容。因此逐一遍历进程,即可计数正在读写的进程并且予以适当排序。

比如,列出正在发起读操作的前20个进程,我们可以这样办理

for pid in $(cd /proc;ls | perl -nE 'chomp;next if (!/^\d+$/);say');do \
  if [ -e /proc/${pid} ];then \
    num=$(cat /proc/${pid}/io | grep -E '^rchar:' | cut -d ' ' -f 2);\
    echo "${num} ${pid}";\
  fi;\
done | sort -n -r | head -20 

当然,上面的命令稍加改动就可以用到正在写的进程上

for pid in $(cd /proc;ls | perl -nE 'chomp;next if (!/^\d+$/);say');do \
  if [ -e /proc/${pid} ];then \
    num=$(cat /proc/${pid}/io | grep -E '^wchar:' | cut -d ' ' -f 2);\
    echo "${num} ${pid}";\
    fi;\
done | sort -n -r | head -20 

以上两个命令的执行示例如下

root@demo:~# for pid in $(cd /proc;ls | perl -nE 'chomp;next if (!/^\d+$/);say');do \
>   if [ -e /proc/${pid} ];then \
>     num=$(cat /proc/${pid}/io | grep -E '^rchar:' | cut -d ' ' -f 2);\
>     echo "${num} ${pid}";\
>   fi;\
> done | sort -n -r | head -20
28908475231 1
5022495635 1309
3647776277 906
1537484053 1806
1091171589 1388
955070588 31283
445533142 1458
325857806 920
148582179 893
75633008 9729
75169817 2068
74541144 2038
74355216 2067
73356682 2085
70308680 2073
50819715 1873
48753553 2080
48556521 1436
47121818 1709
41993240 29162
root@demo:~# for pid in $(cd /proc;ls | perl -nE 'chomp;next if (!/^\d+$/);say');do \
>   if [ -e /proc/${pid} ];then \
>     num=$(cat /proc/${pid}/io | grep -E '^wchar:' | cut -d ' ' -f 2);\
>     echo "${num} ${pid}";\
>     fi;\
> done | sort -n -r | head -20 
1180115284 31283
502324828 1
488319291 906
94696438 1309
61642095 1458
41535896 893
39210225 29162
15680109 1359
9482873 2068
5626696 1756
5545914 1709
4047538 1677
2944955 478
2602756 19648
2065398 22388
2060970 22389
1816383 19644
1687956 1307
1548644 19647
1545858 19645
root@demo:~#
相关文章
|
23天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
61 3
|
23天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
57 2
|
7天前
|
运维 监控 Linux
Linux操作系统的守护进程与服务管理深度剖析####
本文作为一篇技术性文章,旨在深入探讨Linux操作系统中守护进程与服务管理的机制、工具及实践策略。不同于传统的摘要概述,本文将以“守护进程的生命周期”为核心线索,串联起Linux服务管理的各个方面,从守护进程的定义与特性出发,逐步深入到Systemd的工作原理、服务单元文件编写、服务状态管理以及故障排查技巧,为读者呈现一幅Linux服务管理的全景图。 ####
|
17天前
|
Ubuntu Linux 网络安全
linux系统ubuntu中在命令行中打开图形界面的文件夹
在Ubuntu系统中,通过命令行打开图形界面的文件夹是一个高效且实用的操作。无论是使用Nautilus、Dolphin还是Thunar,都可以根据具体桌面环境选择合适的文件管理器。通过上述命令和方法,可以简化日常工作,提高效率。同时,解决权限问题和图形界面问题也能确保操作的顺利进行。掌握这些技巧,可以使Linux操作更加便捷和灵活。
15 3
|
23天前
|
存储 运维 监控
深入Linux基础:文件系统与进程管理详解
深入Linux基础:文件系统与进程管理详解
62 8
|
20天前
|
网络协议 Linux 虚拟化
如何在 Linux 系统中查看进程的详细信息?
如何在 Linux 系统中查看进程的详细信息?
37 1
|
20天前
|
Linux
如何在 Linux 系统中查看进程占用的内存?
如何在 Linux 系统中查看进程占用的内存?
|
23天前
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
60 3
|
25天前
|
安全 Linux 数据安全/隐私保护
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。本文介绍了使用 `ls -l` 和 `stat` 命令查找文件所有者的基本方法,以及通过文件路径、通配符和结合其他命令的高级技巧。还提供了实际案例分析和注意事项,帮助读者更好地掌握这一操作。
42 6
|
5月前
|
运维 关系型数据库 MySQL
掌握taskset:优化你的Linux进程,提升系统性能
在多核处理器成为现代计算标准的今天,运维人员和性能调优人员面临着如何有效利用这些处理能力的挑战。优化进程运行的位置不仅可以提高性能,还能更好地管理和分配系统资源。 其中,taskset命令是一个强大的工具,它允许管理员将进程绑定到特定的CPU核心,减少上下文切换的开销,从而提升整体效率。
掌握taskset:优化你的Linux进程,提升系统性能