如何取得后台进程的pid

发布网友

我来回答

1个回答

热心网友

在《如何压缩程序占用内存的方法》里我为了测试程序的内存占用大小写了一个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

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com