在gtest中捕获不同线程中的信号



我有一个多线程应用程序,我想测试向这些线程发送特定信号的行为(即验证EINTR错误是否发生在阻塞函数上(。

在线程中,我设置了如下内容:

struct sigaction sa {}; 
sa.sa_handler = func;
sigemptyset(&sa.sa_mask);
sa.sa_flags = SA_NODEFER; 
sigaction(SIGUSR1, &sa, [](int){std::cout << "SIGUSR1 calledn";});

现在,如果我通过:从gtest发送信号

TEST(Thread, ThreadSignals) {
Thread test_thread;
std::future<int> future = std::async(&Thread::test, &test_thread);
ASSERT_NE(test_thread.get_id(), 0); // get_id() returns the id of the test_thread
ASSERT_NE(test_thread.get_id(), pthread_self()); 
pthread_kill(test_thread.get_id(), SIGUSR1); 
}

gtest以如下信号消息结束:

[ RUN      ] Thread.ThreadSignals
User defined signal 1

,而不是预期的行为(例如,打印消息(。总的来说,我对任务没有问题。

此外,在TEST情况下获取信号并不能阻止gtest退出。我找到了设置,比如

// debugging information when fatal signals are raised.
GTEST_DECLARE_bool_(install_failure_signal_handler);

,但他们没有改变任何东西——或者我不知道,把它们放在哪里。。。

(我目前正在从catch2切换,因为我希望我能在这里测试信号(

谢谢你的建议!

原则上这是可行的。我没有正确设置sa_handler!

最新更新