C++:如果发生段错误或类似的事情,是否有办法杀死单个线程但保留应用程序 运行?

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

主题或多或少地解释了问题。 我正在使用 C++ 和 Wt 构建一个 Web 应用程序。 当然,我正在尝试特别小心可能导致段错误的事情,但它可能会发生。 Wt 为每个打开会话的用户创建一个单独的线程。 我最担心的是,具体来说,恶意用户发现了一个错误,例如产生段错误,并设法利用它,使整个应用程序随心所欲地崩溃。

首选的行为是我可以 "catch" 信号(是的,我知道段错误也不例外,这就是我使用引号的原因),终止产生它的线程,也许,如果可能的话,释放它分配的内存,然后为其他用户保留应用程序 运行。

可能吗?

谢谢。

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

signal(SIGSEGV, sighandler); 

void sighandler(int signum)

{
    printf("Process %d got signal %d\n", getpid(), signum);
    kill(getpid(), signum);
}

可以通过指定 session management configuration 选项来回避这个问题。因此,您可以将每个会话分配给一个单独的进程,这会因段错误而崩溃,但不会影响其他会话。

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