我有一个小问题,让程序计算信号发送到子进程的次数。显示错误的值。
父级应该通过管道将数组的每个元素发送给子级,然后子级应该读取并显示发送的内容。 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
}
由于
答案 0 :(得分:0)
计算信号是不安全的。多个终止信号可以合并到接收器上的接通信号接收中。将kill / signal视为硬件中断信号。使用它们仅用于轻推,但不要依赖于每一个将与其他具有相同信号值的实例无法接收。