static int ServerLoop(void) { …… // 所有模拟信号都不阻塞 gs_signal_setmask(&t_thrd.libpq_cxt.UnBlockSig, NULL); // SIGUSR2, SIGPROF, SIGSEGV, SIGBUS, SIGFPE, SIGILL, SIGSYS 不阻塞。 (void)gs_signal_unblock_sigusr2(); if (pmState == PM_WAIT_DEAD_END) { pg_usleep(100000L); /* 100 msec seems reasonable */ } else { poll 或者 select } /* * Block all signals until we wait again. (This makes it safe for our * signal handlers to do nontrivial work.) */ // 除了SIGTRAP, SIGABRT, SIGILL, SIGFPE, SIGSEGV, SIGBUS, SIGSYS, SIGCONT,其它模拟信号全部阻塞。 gs_signal_setmask(&t_thrd.libpq_cxt.BlockSig, NULL); // 除了SIGPROF, SIGSEGV, SIGBUS, SIGFPE, SIGILL, SIGSYS,其它信号全部阻塞。 gs_signal_block_sigusr2(); …… }