使用使用 ID 处理交换使用

Process swap usage with use ID

我一直在尝试更新一个单行工作,以便为在系统上使用交换的进程添加用户名,但很难让它工作。

线程 here 为我提供了一个非常好的脚本,我已经部分成功,但仍然遇到一些问题。

for file in /proc/*/status ; do awk -F: '/Tgid|VmSwap|Name/{printf  }END{ print ""}' $file; done|  grep kB  | sort -k 3 -n -r | head -n 10 | awk 'BEGIN { ORS=" " };{print [=10=] system("ps -o user= -p " )}

以上产生输出:

username 0
processname0  1734      334248 kB0 username1
processname1    2314      182360 kB0 root
processname2    2069626    78292 kB0 username2
processname3  2069621    11500 kB0 root
processname4       2540        8720 kB0 root
processname5  1547        4320 kB0 root
processname6   1556        3380 kB0 root
processname7    2069656     3208 kB0 root
processname8   1398        1312 kB0 root

用户名出现在不同的行是一个问题,另一个是在 'kB' 之后添加 0。

我尝试了一些不同的方法,但似乎没有任何效果。

此外,该脚本正在 运行 通过另一个工具,并且必须是一个单一的衬里,这有点限制了选项。任何帮助都会很棒。

经过更多的尝试和错误,我终于成功了。

以下是最终运行的代码片段:

for file in /proc/*/status ; do awk -F: '/Tgid|VmSwap|Name/{printf }END{print ""}' $file 2>/dev/null ; done | grep kB | sort -k 3 -n -r | head -n 10 | awk 'BEGIN{printf "%-20s %-10s %10s %-5s %10s\n","Process ID","PID","Size","Units","User"};{cmd="ps -o user= -p " ; cmd | getline result; printf "%-20s %-10s %10s %-5s %10s\n",,,,,result}'