我想知道是否有赶线程谁坠毁的id一种简单的方法,而无需使用中间体signal_handlers获取谁扔的信号
线程的id我有以下代码
void signal_handler(int signal)
{
std::cout << "Caught the signal:" << signal << std::endl;
}
void handler_t1(int signal)
{
std::signal(SIGSEGV, signal_handler);
std::cout << "Thread 1 have received the signal: " << signal << std::endl;
std::raise(SIGSEGV);
}
void f1()
{
std::signal(SIGSEGV, handler_t1);
std::cout << "Begin thread 1" << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(1));
std::raise(SIGSEGV);
std::cout << "end thread1" << std::endl;
}
void f2()
{
std::cout << "Begin thread 2" << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(3));
std::cout << "end thread2" << std::endl;
}
int main()
{
std::thread t1(f1);
std::thread t2(f2);
t1.join();
t2.join();
}
所以我得到的
Begin thread 1Begin thread 2
Thread 1 have received the signal: 11
Caught the signal:11
end thread1
end thread2
但是,如果我有5个线程,我能避免创建5处理器?
编辑我是包括
#include <thread>
#include <chrono>
#include <iostream>
#include <csignal>
编辑 我觉得我一直在寻找类似的东西,我发现https://stackoverflow.com/a/16259324/2380470 但因为这件事不存在,我一定要找到的东西否则
一般而言,信号不会从您自己的线程中抛出,所以我不确定这是否合理。如果它来自'kill -s SIGSEGV'? –
BoBTFish
@Alexis您会介意在代码中发布适当的包含吗?我可能会对你的问题的某些部分感兴趣。 – hetepeperfan
@hetepeperfan包括我发现在std网站(编辑我的问题) – Alexis