在非root用户下,$$获取到的进程id和实际的id不一样
来源:6-1 函数定义和使用
逮虾乎
2019-03-02
下面是我的脚本
#!/bin/bash
this_pid=$$
ps -ef | grep nginx | grep -v grep | grep -v $this_pid
if [ $? -eq 0 ];then
echo "Nginx is running well"
else
systemctl start nginx
echo "Nginx is down,start it"
fi
在我将nginx服务停掉之后,执行上述脚本
[vagrant@docker-host shell]$ sudo bash -x nginx_daemon.sh
- this_pid=9071
- grep nginx
- grep -v grep
- grep -v 9071
- ps -ef
root 9069 8446 0 16:06 pts/0 00:00:00 sudo bash -x nginx_daemon.sh - ‘[’ 0 -eq 0 ‘]’
- echo 'Nginx is running well’
Nginx is running well
$$获取到的进程id和实际的id不一样
写回答
1回答
-
酷田
2019-03-03
执行sudo其实是以另外一个用户执行脚本,因此通过$$是无法获取到脚本所生成的子进程pid的!可以通过两种方法来规避,一种是将脚本命名成不包含nginx的脚本名,另一种方法是直接grep -v $0,直接将脚本名称过滤掉,也可以实现把执行脚本的进程排除掉的目的!您提的问题很好,我没发现,多谢多谢?
20
相似问题