我正在尝试获取与流程和一般系统信息有关的统计信息。如果我不进行循环就可以正常运行,但是如果我将其放入循环内,则会给我一系列非法字符的链接错误。
#!/bin/bash
TOTALMEM=$(awk '{ print $1 }' /proc/meminfo)
l=$(ls /proc | grep '[0-9]$')
for pid in $l
do
PID=$pid
cmd=$(cat /proc/$PID/cmdline)
state=$(awk '{ print $3 }' /proc/$PID/stat)
utime=$(awk '{ print $14 }' /proc/$PID/stat)
stime=$(awk '{ print $15 }' /proc/$PID/stat)
pr=$(awk '{ print $18 }' /proc/$PID/stat)
state=$(awk '{ print $3 }' /proc/$PID/stat)
ttime=$(($utime+$stime))
mem=$(cat /proc/$PID/status | grep VmSize: | awk '{ print $2 }')
memp=$(echo "scale=2;$TOTALMEM / $mem" | bc -l)
memp="$memp%"
mem=$(echo "scale=2;$mem / 1024" | bc -l)
cpu=$ttime
usr=$(stat -c '%U' /proc/$PID)
process_string="$PID $usr $pr $mem $state $cpu $memp $ttime $cmd"
echo $process_string
done
这是提示错误的示例。就像这样(随机字符给出错误),每个索引重复一堆(从1到44)。
(standard_in) 1: illegal character: M
(standard_in) 1: illegal character: T
(standard_in) 1: syntax error
(standard_in) 1: illegal character: :
一旦它在第44个索引处结束,它将打印不带$ memp(内存百分比使用量)值的变量$ process_string。似乎每个$ pid(进程)都会发生这种情况。
如果我将其放入for循环中,则它将中断,但如果不这样做,则它不会中断,并且我不知道为什么它会以这种方式工作。