中間体 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 つの handler を作成することを避けることができますか?
編集私のインクルードは
#include <thread>
#include <chrono>
#include <iostream>
#include <csignal>
編集https://stackoverflow.com/a/16259324/2380470 を見つけたようなものを探していたと思い が、このことはまだ存在しないので、何か他のものを見つける必要があります