linux 使用使用ID处理交换使用

nnsrf1az  于 2023-03-07  发布在  Linux
关注(0)|答案(2)|浏览(146)

我一直在尝试更新一个正在工作的一行程序,以便为系统上使用交换的进程添加用户名,但很难让它工作。
线程here给了我一个很好的脚本,我已经部分成功,但仍然看到一些问题。

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

以上操作将生成输出:

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。
我试过几种不同的方法,但似乎都不起作用。
此外,脚本是通过另一个工具运行,必须是一个一行程序,这是限制选项有点。任何帮助将是伟大的。

mlmc2os5

mlmc2os51#

经过大量的试验和错误,我能够得到这个工作。
下面是最终运行正常的代码片段:

for file in /proc/*/status ; do awk -F: '/Tgid|VmSwap|Name/{printf $2}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 " $2; cmd | getline result; printf "%-20s %-10s %10s %-5s %10s\n",$1,$2,$3,$4,result}'
cedebl8k

cedebl8k2#

你的命令对我很有效,非常感谢!为了防止你需要更多的细节,我还找到了这个:

for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done | sort -k 2 -n -r | less

相关问题