具有两个线程的Segfault逻辑

时间:2013-09-12 11:13:14

标签: c++ multithreading segmentation-fault

我有一个主线程的应用程序和在其中创建的附加(分离)进程。 在那个过程中,我们正在运行网络服务器,它通过网络从队列发送日志。

问题是:是否可以在segfault处理程序中执行某些操作来等待/完成发送该日志队列。所以我希望几乎100%交付该队列。

2 个答案:

答案 0 :(得分:1)

您可以等待()进程和pthread_wait()以完成一个线程(您没有明确指定使用哪一个)。

请记住,如果你处于segfault处理程序中,你的记忆就搞砸了(避免使用malloc()和free()),你的FILE *也可以被剔除。

答案 1 :(得分:1)

虽然可以编写段错误处理程序,但我强烈建议不要这样做。首先,由于segfault处理程序中的段错误,很容易使程序进入“不会终止”状态。

其次,正如dan3所提到的,这个过程的记忆可能处于腐败状态,这使得很难知道什么会起作用,哪些行不通。

最后,您将失去使用该流程中的coredump来帮助追踪问题的机会。

虽然不推荐,但有可能。

我的建议是编写一个小程序,尽可能避免内存分配和指针的使用。也许创建缓冲区作为全局数组,并且只能使用有限的代码访问它们,这些代码可以由几个熟练的开发人员审查并进行彻底测试(压力测试很棒)。但请记住,如果发件人或收件人崩溃,邮件仍可能丢失,因此可能不值得付出努力。

顺便说一下 - 当Netscape首次为Linux编写一个浏览器版本时,我运行它并且它一直处于锁定状态。使用strace程序,我很快发现它处于一个无限的段错误循环中。非常令人沮丧,导致几乎100%的CPU浪费。