c++:如果发生段错误或类似的事情,是否有一种方法可以终止单个线程,但保持应用程序运行

C++: If a segfault or something similar happens, is there a way to kill the single thread but keeping the application running?

本文关键字:方法 一种 终止 单个 应用程序 运行 线程 是否 错误 如果 段错误      更新时间:2023-10-16

主题或多或少地解释了问题。我正在构建一个web应用程序与c++和Wt。当然,对于可能导致段错误的事情,我会格外小心,但这是可能发生的。Wt为每个打开会话的用户创建一个单独的线程。我最担心的是,特别地,一个恶意的用户发现了一个错误,例如产生一个段错误,并设法利用它,使整个应用程序崩溃心血来潮。

首选的行为是,我可以"捕获"信号(是的,我知道段错误不是一个异常,这就是为什么我使用引号),杀死产生它的线程,也许,如果可能的话,释放它分配的内存,然后保持应用程序为其他用户运行。

有可能吗?

谢谢。

可以通过指定会话管理配置选项来回避这个问题。因此,您可以将每个会话分配给单独的进程,这将在段故障时崩溃,但不会影响其他会话。

详细说明:Wt并没有为每个会话创建一个线程,它使用一个线程池来调度工作。

是可以为SIGSEGV编写处理程序。这样你就可以指定将要发生什么。

signal(SIGSEGV, sighandler); 
void sighandler(int signum)
{
    printf("Process %d got signal %dn", getpid(), signum);
    kill(getpid(), signum);
}
相关文章: