工作中遇到运维人员挂supervisor的时候建议启动使用命令control.sh start, 并且在control.sh 里面启动命令:
exec -c ./bin/xxx -f config/xxx.conf
使用man看下说明,可以看到exec是一个内部命令,
如这里说的exec是将要exec的命令替换当前的这个命令。所以这个意思是
如果你使用了exec之后,你当前的这个shell的pid就没有了,被exec的命令所替代。
我们创建一个control.sh:
sleep 10
当我们运行 sh control.sh的时候,我们使用
watch "ps aux|grep control"
来观察control.sh的进程
发现是有的:
vagrant 7044 0.0 0.2 106068 1300 pts/0 S+ 06:41 0:00 sh control.sh
但是我们control.sh修改为:
exec sleep 10
发现我们grep不出来control进程。
这个实验能说明exec是用新的进程去代替原先的进程,原先的进程就消失了。
参考: