提问人:Gabriel Martins 提问时间:11/8/2023 最后编辑:Gabriel Martins 更新时间:11/9/2023 访问量:48
在C++程序中调用 ruby_init() 后 SIGINT 信号处理问题
Trouble with SIGINT signal handling after calling ruby_init() in a C++ program
问:
我目前正在开发一个C++程序,该程序使用 ruby_init() 嵌入 Ruby 解释器。但是,我注意到在调用 ruby_init() 后,SIGINT (Ctrl+C) 信号似乎在我的程序中无法按预期工作。
按下 Ctrl+C 时,应用程序不会关闭。只有当我调用 ruby_finalize() 时,SIGINT 信号才会再次开始工作,并且当按下 Ctrl+C 时,应用程序才会关闭。
这是我的代码的简化版本:
#include <ruby.h>
#include <iostream>
int main()
{
// SIGINT signal works at this point
// Initialize the Ruby interpreter
ruby_init();
// SIGINT signal stops working after this point
while (isOpen) {
// Code that interacts with Ruby
}
// Close the Ruby interpreter
ruby_finalize();
// SIGINT starts working again
return 0;
}
我试图理解为什么在嵌入 Ruby 时没有正确捕获和处理 SIGINT 信号。如果能深入了解可能导致这种行为的原因以及如何解决它,我们将不胜感激。
提前感谢您的帮助!
编辑:
我试图在 Ruby 解释器中捕获信号,但它没有收到中断信号。我尝试了以下方法:
rb_eval_string("Signal.trap('INT') { puts 'interrupt signal received' }");
答: 暂无答案
评论
ruby_init
rb_eval_string("Signal.trap('INT') { puts 'interrupt signal received' }");
rb_eval_string("Signal.trap('INT') { puts 'interrupt signal received' }");