Atlas源码剖析(三)

本文深入剖析Atlas的keepalive进程开启过程。通过调用chassis_unix_proc_keepalive函数,Atlas使用fork创建子进程,父进程接收并转发特定信号给子进程。若子进程退出,父进程将根据退出原因决定日志记录及是否重启子进程,确保服务的持续可用性。
摘要由CSDN通过智能技术生成

keepalive进程的开启

Atlas调用chassis_unix_proc_keepalive函数来keep process alive。

调用fork创建子进程,其中子进程直接返回,处理接下来的任务,父进程将接收到的SIGINT、SIGTERM、SIGHUP、SIGUSR1和SIGUSR2信号发送给子进程进行处理,若系统支持wait4则调用wait4等待子进程结束,否则调用waitpid。

若子进程退出,对pid_file调用unlink(这个文件保存了子进程的pid)。检查子进程的退出原因,若是调用exit退出的,写入日志,同时父进程返回1,这将会导致父进程的结束;若是因为信号而退出,写入日志,同时sleep 2秒后重启子进程。

若是出的其的错误,则写入日志,返回-1结束。

这样就以keepalive的形式启动了整个程序,子进程负责对外提供服务,父进程则监控子进程,保证子进程一直都处于活跃状态,若子进程终止,则重新创建子进程,以保证服务的不中断。

int chassis_unix_proc_keepalive(int *child_exit_status, const char *pid_file) {
#ifdef _WIN32
   g_assert_not_reached(); 
   return 0; 
#else
   int nprocs = 0;
   pid_t child_pid = -1; 

   /* we ignore SIGINT and SIGTERM and just let it be forwarded to the child instead
    * as we want
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值