另一个正在运行的进程(我无法访问其代码)将以随机顺序向我的进程发送一堆SIGUSR2信号和两个SIGUSR1信号。我的程序的目的是计算在接收第一个和第二个SIGUSR1信号之间它已经收到SIGUSR2信号的次数。
(另一个进程从我的进程收到SIGUSR1信号后将开始发送)。
我是信号处理的入门者,因此,如果某种程度上涉及循环,则对我来说会更难。我已经看到无限循环处理信号是很平常的事情,但这使我无法正确实现它。
int counter=0;
void count_up(){
counter++;
}
void signal_catcher(){
signal(SIGUSR2,count_up);
// I think here should go some sort of loop that makes it keep catching SIGUSR2
// There should be some flag or somtehing too, so that it stops after receiving
// the second SIGUSR1
}
int main(int argc, char *argv[]){
int pid_sender = atoi(argv[1]);
kill(pid_sender,SIGUSR1); //The other process is notified to start
signal(SIGUSR1,signal_catcher); //The first SIGUSR1 is catched
}
答案 0 :(得分:0)
就这么简单。首先,根据您的一个来创建SIGUSR2
处理程序:
int counter;
void catch_usr2(void) {
counter++;
}
和SIGUSR1
处理程序:
int sw;
void catch_usr1(void) {
if(!sw) {
signal(SIGUSR2, catch_usr2);
sw = 1;
} else {
signal(SIGUSR2, SIG_DFL);
/* Side note: If you want to count these only single time, remove line below. */
sw = 0;
}
}
该第一个信号将SIGUSR2
设置为反过程,并将sw
设置为1。下次捕获SIGUSR1
时,处理程序将自身删除。然后将其注册为SIGUSR1
处理程序:
signal(SIGUSR1, catch_usr1);
假设2122212
的顺序,此代码将使counter
等于3。