c++:如果发生段错误或类似的事情,是否有一种方法可以终止单个线程,但保持应用程序运行
C++: If a segfault or something similar happens, is there a way to kill the single thread but keeping the application running?
主题或多或少地解释了问题。我正在构建一个web应用程序与c++和Wt。当然,对于可能导致段错误的事情,我会格外小心,但这是可能发生的。Wt为每个打开会话的用户创建一个单独的线程。我最担心的是,特别地,一个恶意的用户发现了一个错误,例如产生一个段错误,并设法利用它,使整个应用程序崩溃心血来潮。
首选的行为是,我可以"捕获"信号(是的,我知道段错误不是一个异常,这就是为什么我使用引号),杀死产生它的线程,也许,如果可能的话,释放它分配的内存,然后保持应用程序为其他用户运行。
有可能吗?
谢谢。
可以通过指定会话管理配置选项来回避这个问题。因此,您可以将每个会话分配给单独的进程,这将在段故障时崩溃,但不会影响其他会话。
详细说明:Wt并没有为每个会话创建一个线程,它使用一个线程池来调度工作。
是可以为SIGSEGV
编写处理程序。这样你就可以指定将要发生什么。
signal(SIGSEGV, sighandler);
void sighandler(int signum)
{
printf("Process %d got signal %dn", getpid(), signum);
kill(getpid(), signum);
}
相关文章:
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 有没有一种方法可以在编译时获得作用域类名
- 对于C++中使用智能指针的指针算术限制,有没有一种变通方法
- 一种在C++中读取TXT配置文件的简单方法
- 有没有一种方法可以测量c++程序的运行时内存使用情况
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 在调用接收数组的方法时,模板化数组大小是不是一种糟糕的做法
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 有没有一种代码密度较低的方法来使用非默认构造函数初始化数组?
- 在 c++ 中,有一种方法可以创建一个包含地图作为值的树状地图?
- 有没有一种优雅而快速的方法来测试整数中的 1 位是否位于连续区域
- C++ STD 函数运算符:有没有一种方法可以通过函数将一个向量映射到另一个向量上?
- 找到一种有效的方法,在 2 个巨大的缓冲区上执行 MAX,每字节字节
- 寻找一种更好的方法来表示无符号字符数组
- 有没有一种通用的方法来实现不变量
- 有没有一种方法可以捕获进程中的堆栈溢出?C++Linux
- 使用类在C++中存储和列出变量/方法是否是一种好的做法
- 一种从内存中删除 UTF 字节的方法?