阅读背景:

如何等待子进程发送信号?

来源:互联网 
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
#include <sys/types.h>

void handler(int signumber)
{
    return;
}

int main()
{
    int i, pid;
    int children_count = 5;
    int arr_childprocesses[5];
    int parent_pid = getpid();

    for(i=0;i<children_count;i++)
    {
        pid = fork();
        if(pid == -1) 
        {
            perror("Err");
            exit(EXIT_FAILURE);
        }

        if(pid == 0) break;

        arr_childprocesses[i] = pid;
    }

    if (pid == 0) // children
    {
        kill(parent_pid,SIGUSR1);
        printf("Child(%d) sig sent. Waiting 5s...\n",getpid());
        sleep(5);
        printf("Child(%d) terminated.\n",getpid());
    }
    else // parent
    {
        signal(SIGUSR1,handler);
        for(i=0;i<children_count;++i)
        {
            waitpid(arr_childprocesses[i],NULL,0);
            printf("Parent: Signal received.\n");
        }
        printf("Parent(%d) signals received. Waiting 3s...\n",getpid());
        sleep(3);
        printf("Parent(%d) terminated.\n",getpid());
    }

    exit(EXIT_SUCCESS); 
}
#include <stdlib.h>
#include <stdio.h>
#include



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: