我正在构建一个处理从RS232端口接收的信号的算法。基本思路是从RS232接收信号,然后用相机抓取图像。
现在让我们忽略相机和RS232。我的短程序应该进入while循环,并询问“cin”命令。如果command == 'b'
,则应引发信号并激活signal_handler()
功能。现在它工作正常。
我想要做的是更改程序以重新进入while循环并继续。我的程序在中断后终止。
当我删除exit(signum)
时,程序返回while循环并请求命令。如果我再次输入'b'程序结束。
我哪里出错了?错误的信号或整个方法?
谢谢!
void signalHandler(int signum) {
cout << "Interrupt signal (" << signum << ") received.\n";
}
int main(){
char Command = 'a';
signal(SIGINT, signalHandler);
while (true){
cout << "Command: ";
cin >> Command;
if (Command == 'b'){
raise(SIGINT);
}
}
return 0;
}
答案 0 :(得分:1)
你遇到的问题是因为一个信号被捕获,信号处理程序重置到它的默认值,在SIGINT
的情况下是终止进程。 / p>
您应该使用sigaction
,这样可以指定行为(请查看有关SA_RESETHAND
标志的部分)。