supervisor 管理进程异常

243 阅读1分钟

supervisor 管理进程异常

问题描述:

  • supervisor管理im 服务进程启动和停止异常。根据问题现象推理,im的启动多了一层shell,初步推断shell多一层封装对supervisor来说是黑盒子。

问题校验:

  • 通过supervisor启动服务发现会有两个进程,一个会控制服务shell的父进程和一个服务本身的子进程。

解决方案:

  • 让shell和服务启动同属于一个进程,而不fork子进程。把shell里封装启动服务改为exec 'java.....'

其它

主进程t shell

#!/bin/sh
echo $$
echo 'i am main process'
echo mypid is :$$
​
echo 'run sub process by  shell'
/root/t1.sh shell
​
echo 'run sub process by source'
​
. /root/t1.sh sourceecho 'run sub process by exec'
exec /root/t1.sh exec
​
​

子进程t1 shell

#!/bin/sh
echo 'im t1 process'
echo "run method is:$1"
echo mypid is: $$
​

执行结果说明

[root@ghd_6_78 ~]# cat t1.sh
#!/bin/sh
echo 'im t1 process'
echo "run method is:$1"
echo mypid is: $$
[root@ghd_6_78 ~]# ./t.sh 
8953
i am main process
mypid is :8953
run sub process by  shell
im t1 process
run method is:shell
mypid is: 8954
run sub process by source
im t1 process
run method is:source
mypid is: 8953
run sub process by exec
im t1 process
run method is:exec
mypid is: 8953
​
​
// 除了shell启用外,source、exec都是不会派生新的进程