计算父母将信号发送给孩子的次数

时间:2015-03-10 06:32:09

标签: c signals

我有一个小问题,让程序计算信号发送到子进程的次数。显示错误的值。 父级应该通过管道将数组的每个元素发送给子级,然后子级应该读取并显示发送的内容。 count保存发送给孩子的信号数量。 有什么帮助吗?

#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <signal.h>

int count = 0;//number of SIGUSR1 signal sent to child by parent

void sigHandler(int signum){
    signal(SIGUSR1, sigHandler);
    if (signum == SIGINT){
        printf("SINGINT Received\n");
        count++;
    }   
}

int main(void){
    int pid, fd[2], ato, i;
    pipe(fd);
    pid = fork();
    int x[] = {1, 2, 3, 4, 5, 6, 7};
    char bufP[3], bufC[3];
    signal(SIGINT, sigHandler);
    if (pid == 0){
        //child         
        printf("I am Child\n");     
        close(fd[1]);
        read(fd[0], bufC, sizeof(bufC));
        close(fd[0]);
        ato = atoi(bufC);
        printf("Child read: %d\n", ato);
        sleep(2);
    }else{
        //parent
        printf("I am Parent\n");            
        for (i=0; i<7; i++){
            close(fd[0]);
            sprintf(bufP, "%d", x[i]); 
            write(fd[1], bufP, sizeof(bufP));                
            close(fd[1]);               
            sleep(1);
            kill(pid, SIGINT);  //sending signal to child               
        }                       
    }       
    printf("Count: %d\n", count); //number of times signal was sent     
}

由于

1 个答案:

答案 0 :(得分:0)

计算信号是不安全的。多个终止信号可以合并到接收器上的接通信号接收中。将kill / signal视为硬件中断信号。使用它们仅用于轻推,但不要依赖于每一个将与其他具有相同信号值的实例无法接收。