我有一個簡單的服務器,它看起來是這樣的:如何在使用工作線程模式時正確處理信號?
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