libev下的ev_child实用功能

多进程场景下,作为高可靠性,高运维性的设计原则,master主进程如何掌控worker子进程的状态,是否当机,是否挂了?

lib 作为一个强大的基础设施,自然也早考虑好了这种需求,ev_child就是为此而生,为我们提供了这种可能。

首先看看样例代码:

ev_child cw;

static void child_cb (EV_P_ struct ev_child *w, int revents)
{
ev_child_stop (EV_A_ w); 
printf ("process %d exited with status %x\n", w->rpid, w->rstatus); 

 

pid_t pid = fork (); 

if (pid < 0
// error else if (pid == 0) 
{
// the forked child executes here exit (1); 
else { 
ev_child_init (&cw, child_cb, pid, 0); 
ev_child_start (EV_DEFAULT_ &cw); 
} 

上面的例子 ,主进程通过pid将子进程绑定到了child_cb 事件proc 中,当子进程挂掉后,主进程就能捕捉的信号,重新创建进程,进行替补,保证工作流的正常。

测试场景:

1 主进程启动后启动一个子进程。

2 手动通过后台kill命令,kill掉子进程。

3 主进程收到信息,打印出提示。

OK,成功! 

 

posted @ 2012-04-24 01:52  透传云  阅读(1060)  评论(0编辑  收藏  举报