0

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

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

4

2 回答 2

1

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

请记住,如果您在 segfault 处理程序中,您的内存就会混乱(避免 malloc() 和 free())并且您的 FILE * 也可能会被破坏。

于 2013-09-13T08:51:35.963 回答
1

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

其次,正如 dan3 所提到的,进程的内存可能处于损坏状态,因此很难知道什么会起作用,什么不会起作用。

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

虽然不推荐,但有可能。

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

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

于 2013-09-15T07:20:18.753 回答