/* {{{ zend_signal_startup * alloc zend signal globals */ void zend_signal_startup(void) { #ifdef ZTS ts_allocate_id(&zend_signal_globals_id, sizeof(zend_signal_globals_t), (ts_allocate_ctor) zend_signal_globals_ctor, NULL); #else zend_signal_globals_ctor(&zend_signal_globals); #endif /* Used to block signals during execution of signal handlers */ sigfillset(&global_sigmask); sigdelset(&global_sigmask, SIGILL); sigdelset(&global_sigmask, SIGABRT); sigdelset(&global_sigmask, SIGFPE); sigdelset(&global_sigmask, SIGKILL); sigdelset(&global_sigmask, SIGSEGV); sigdelset(&global_sigmask, SIGCONT); sigdelset(&global_sigmask, SIGSTOP); sigdelset(&global_sigmask, SIGTSTP); sigdelset(&global_sigmask, SIGTTIN); sigdelset(&global_sigmask, SIGTTOU); #ifdef SIGBUS sigdelset(&global_sigmask, SIGBUS); #endif #ifdef SIGSYS sigdelset(&global_sigmask, SIGSYS); #endif #ifdef SIGTRAP sigdelset(&global_sigmask, SIGTRAP); #endif zend_signal_init(); }
int fpm_signals_init_child() /* {{{ */ { struct sigaction act, act_dfl; memset(&act, 0, sizeof(act)); memset(&act_dfl, 0, sizeof(act_dfl)); act.sa_handler = &sig_soft_quit; act.sa_flags |= SA_RESTART; act_dfl.sa_handler = SIG_DFL; close(sp[0]); close(sp[1]); if (0 > sigaction(SIGTERM, &act_dfl, 0) || 0 > sigaction(SIGINT, &act_dfl, 0) || 0 > sigaction(SIGUSR1, &act_dfl, 0) || 0 > sigaction(SIGUSR2, &act_dfl, 0) || 0 > sigaction(SIGCHLD, &act_dfl, 0) || 0 > sigaction(SIGQUIT, &act, 0)) { zlog(ZLOG_SYSERROR, "failed to init child signals: sigaction()"); return -1; } zend_signal_init(); return 0; }