如何获得上一个进程的pid的方法

在《如何压缩程序占用内存的方法》里我为了测试程序的内存占用大小写了一个shell脚本

 

  
  
  
  
  1. $1 &  
  2. echo "$1 pid:$!" 
  3. sleep 3  
  4. pmap $!|grep total|awk -v pid="$!" '{print "pid",pid," memory:",$2}' 

里面需要用到linux shell的特殊变量$!,网上都是说$! 返回的是 上一个命令的PID。
但是我实际测试得出,这个说法一般不对,一般对
对于前台命令不对:
 
  
  
  
  
  1. [root@bogon ~]# wc -l a.txt  
  2. 2162 a.txt  
  3. [root@bogon ~]# echo $!  
  4. [root@bogon ~]# 
 
但是对于后台命令是对的
 
 
  
  
  
  
  1. [root@bogon ~]# wc -l a.txt &  
  2. [1] 9155  
  3. 2162 a.txt  
  4. [root@bogon ~]# echo $!  
  5. 9155  
  6. [1]+ Done wc -l a.txt 
而且,之后若是执行的命令不是后台命令的话,$!里的值都不会改变,直到下一个后台命令执行为止

 

 

  
  
  
  
  1. [root@bogon ~]# wc -l a.txt  
  2. 2162 a.txt  
  3. [root@bogon ~]# echo $!  
  4. 9155  
  5. [root@bogon ~]# wc -l a.txt &  
  6. [1] 9198  
  7. [root@bogon ~]# 2162 a.txt  
  8. [1]+ Done wc -l a.txt  
  9. [root@bogon ~]# echo $!  
  10. 9198 

结论:$!保存的是最后一个后台执行命令的pid,第一次登录服务器时,$!为空

你可能感兴趣的:(职场,进程,pid,休闲)