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:~#
相关文章
|
5天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
6天前
|
Ubuntu Linux Shell
Linux系统中如何查看磁盘情况
【9月更文挑战第3天】在Linux系统中,有多种方式查看磁盘情况。可通过命令行工具`df`查看文件系统磁盘使用情况,选项`-h`以人类可读格式显示,`-T`显示文件系统类型;`du`命令显示目录或文件磁盘使用情况,`-h`以人类可读格式显示,`-s`仅显示总计;`fdisk -l`列出磁盘和分区信息。此外,图形界面的磁盘管理工具和文件管理器也可用于查看磁盘使用情况。这些方法有助于更好地管理磁盘空间。
|
6天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
2天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
4天前
|
安全 开发者 Python
揭秘Python IPC:进程间的秘密对话,让你的系统编程更上一层楼
【9月更文挑战第8天】在系统编程中,进程间通信(IPC)是实现多进程协作的关键技术。IPC机制如管道、队列、共享内存和套接字,使进程能在独立内存空间中共享信息,提升系统并发性和灵活性。Python提供了丰富的IPC工具,如`multiprocessing.Pipe()`和`multiprocessing.Queue()`,简化了进程间通信的实现。本文将从理论到实践,详细介绍各种IPC机制的特点和应用场景,帮助开发者构建高效、可靠的多进程应用。掌握Python IPC,让系统编程更加得心应手。
11 4
|
9天前
|
存储 Linux 测试技术
发现工作负载使用的 Linux 内核子系统 【ChatGPT】
发现工作负载使用的 Linux 内核子系统 【ChatGPT】
33 11
|
2天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
8天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
3天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
9天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。