我想知道是否有趕線程誰墜毀的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