我是bash的新手,我正试图找到奇怪的pid和最大的内存使用量的过程,所以我想出了:
maxpid=0; maxsize=0; ps -axl --no-headers | tr -s ' ' : | cut -d : -f 3,8 | while read proc; do pid=$((echo $proc | cut -d : -f 1)); psize=$((echo $proc | cut -d : -f 2));if(($pid % 2 == 1)); then if(($psize > $maxsize)); then maxsize=$psize; maxpid=$pid; fi; fi; done; echo "$maxpid $maxsize";
带有一点缩进的是:
maxpid=0; maxsize=0;
ps -axl --no-headers | tr -s ' ' : | cut -d : -f 3,8 |
while read proc; do (1)
pid=$((echo $proc | cut -d : -f 1)); (2)
psize=$((echo $proc | cut -d : -f 2)); (3)
if(($pid % 2 == 1); then
if($psize > $maxsize); then
maxsize=$psize;
maxpid=$pid;
fi;
fi;
done;
echo "$maxpid $maxsize";
我需要从命令行运行它,所以我不想要一个bash脚本。
我知道两个嵌套的if
不太好,但是我无法使用逻辑AND ..我试过了:
if(($pid % 2 -eq 1 -a $psize -gt $maxsize)); then
以及
if(($pid % 2 == 1 && $psize > $maxsize)); then
我也尝试过方形支架,但是我无法让它工作。 任何帮助和纠正都受到广泛赞赏。
编辑:我能够将行(1),(2)和(3)缩短为
while read -r pid psize; do
编辑2:通过更多调试,我能够看到if body(我更正为if (($pid % 2 ==1)) && (($psize > $maxsize)); then
,vars maxpid
和maxsize
内的一切正常工作正确设置,但最后echo
正在打印“0 0”..看起来我有同步问题