有: A:持有打开套接字的程序 B:作为服务运行的看门狗脚本:
while true
do
if [ -z "`pidofproc $1`" ]; then
$1;
chrt -f -p 40 `pidofproc $1`
sleep 8
fi;
sleep 2
done
服务开始时 - 服务停止时看门狗启动
- 看门狗和程序被杀死(killall)。
现在程序想要升级自己,所以它调用system( "upgrade.sh" );
升级.sh:
/sbin/service watchdog stop
.... install upgrade .....
exec /sbin/service watchdog start &
升级成功执行,但是当程序启动时 - 无法打开套接字(已在使用中) - 出现此错误 - 程序退出(由看门狗重新启动)。
lsof -i 在端口上显示三个程序:
watchdog
program
sleep
程序和睡眠 pids 总是改变(即退出/重启行为)
看门狗 pid 持久。
我试图system(...)
用
if(!fork()) exec(...)
,但同样的问题仍然存在。