我有一个多线程应用程序,我想测试向这些线程发送特定信号的行为(即验证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!