zoukankan      html  css  js  c++  java
  • 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,成功! 

  • 相关阅读:
    456. 132 Pattern
    496. Next Greater Element I
    503. Next Greater Element II
    341. Flatten Nested List Iterator
    232. Implement Queue using Stacks
    225. Implement Stack using Queues
    208. Implement Trie (Prefix Tree)
    思考--为何早晨型人更容易成功
    Listary的使用
    【运维】虚拟机如何安装CentOS
  • 原文地址:https://www.cnblogs.com/inteliot/p/2467399.html
Copyright © 2011-2022 走看看