在《如何压缩程序占用内存的方法》里我为了测试程序的内存占用大小写了一个shell脚本
- $1 &
- echo "$1 pid:$!"
- sleep 3
- pmap $!|grep total|awk -v pid="$!" '{print "pid",pid," memory:",$2}'
里面需要用到linux shell的特殊变量$!,网上都是说$! 返回的是 上一个命令的PID。
但是我实际测试得出,这个说法一般不对,一般对
对于前台命令不对:
- [root@bogon ~]# wc -l a.txt
- 2162 a.txt
- [root@bogon ~]# echo $!
- [root@bogon ~]#
但是对于后台命令是对的
- [root@bogon ~]# wc -l a.txt &
- [1] 9155
- 2162 a.txt
- [root@bogon ~]# echo $!
- 9155
- [1]+ Done wc -l a.txt
而且,之后若是执行的命令不是后台命令的话,$!里的值都不会改变,直到下一个后台命令执行为止
- [root@bogon ~]# wc -l a.txt
- 2162 a.txt
- [root@bogon ~]# echo $!
- 9155
- [root@bogon ~]# wc -l a.txt &
- [1] 9198
- [root@bogon ~]# 2162 a.txt
- [1]+ Done wc -l a.txt
- [root@bogon ~]# echo $!
- 9198
结论:$!保存的是最后一个后台执行命令的pid,第一次登录服务器时,$!为空
本文转自yifangyou 51CTO博客,原文链接:http://blog.51cto.com/yifangyou/610309,如需转载请自行联系原作者