我有一个简单的服务器,它看起来是这样的:如何在使用工作线程模式时正确处理信号?
void *run_thread(void *arg) {
// Communicate via a blocking socket
}
int main() {
// Initialization happens here...
// Main event loop
while (1) {
new_client = accept(socket, ...);
pthread_create(&thread, NULL, &run_thread, *thread_data*);
pthread_detach(thread);
}
// Do cleanup stuff:
close(socket);
// Wait for existing threads to finish
exit(0);
)
因此,当一个SIGINT或SIGTERM收到我需要打出来的主事件循环的去清理代码。此外,主线程很可能正在等待accept()调用,因此无法检查其他变量以查看是否应该中断;
我发现的大部分建议都是这样的:http://devcry.blogspot.com/2009/05/pthreads-and-unix-signals.html(创建一个特殊的信号处理线程来捕获所有信号并对这些信号进行处理)。然而,这是处理部分,我不能真正包围我的头:我怎么可能告诉主线程从accept()调用返回并检查外部变量,看看它是否应该打破;?
谢谢,这工作的详细信息。 – ipartola 2010-05-18 19:39:48