zoukankan      html  css  js  c++  java
  • Linuxc:创建与监控多个子进程

    #include <unistd.h>
    #include <sys/types.h>
    #include <stdlib.h>
    #include <signal.h>
    #include <stdio.h>
    
    //子进程个数
    #define SUB_PRO_COUNT 10
    
    //处理子进程的退出信号
    void sub_quit_signal_handle(int sig);
    
    //父进程的事件循环
    void ParentCycle();
    
    //子进程的事件循环
    void ChildCycle();
    
    int main(void)
    {
        pid_t  pid;
        int i;
    
        //创建SUB_PRO_COUNT个子进程
        for(i=0; i<SUB_PRO_COUNT; i++)
        {
            pid = fork();
            if( 0 == pid || -1 == pid )
                break;
        }
    
        //创建子进程失败
        if( -1 == pid )
        {
            printf("No. %d: fork error
    ", i);
        }
        //子进程的事件循环
        else if( 0 == pid )
        {
            ChildCycle();
        }
        //父进程的事件循环
        else
        {
            ParentCycle();
        }
    
        return 0;
    }
    
    void sub_quit_signal_handle(int sig)
    {
        int status;
        //获取退出的那个子进程的状态
        int quit_pid = wait(&status);
        printf("sub process %d quit, exit status %d
    ", quit_pid, status);
    
        //新创建一个子进程
        pid_t pid = fork();
        if( 0 == pid )
             ChildCycle();
    }
    
    void ParentCycle()
    {
        printf("Parent process %d
    ", getpid());
        signal(SIGCHLD, sub_quit_signal_handle);
        while(1)
            pause();
    }
    
    void ChildCycle()
    {
        printf("create sub process id: %d, parent id: %d
    ", getpid(), getppid());
        while(1)
            pause();
    }
  • 相关阅读:
    进程上下文VS中断上下文
    字符串分割处理
    C++接收含有空格的字符串
    TLS分析
    位运算之bit_xor、bit_not、bit_and、bit_or
    GET和POST区别
    我的 HTTP/1.1 好慢啊!
    HTTP/2与HTTP/1的比较
    C++11新特性之一— auto 和 decltype 区别和联系
    C++ tuple元组的基本用法(总结)
  • 原文地址:https://www.cnblogs.com/aspirant/p/3602517.html
Copyright © 2011-2022 走看看