예제 #1
0
void register_other_handlers()
{
    #ifdef SIGALRM
	REGISTER_SIGNAL(SIGALRM, &alarm_handler, log_server_register_handler);
    #endif

    #ifdef SIGVTALRM
	REGISTER_SIGNAL(SIGVTALRM, &alarm_handler, log_server_register_handler);
    #endif

    #ifdef SIGPROF
	REGISTER_SIGNAL(SIGPROF, &alarm_handler, log_server_register_handler);
    #endif

    log_server_register_other_handlers();
}
예제 #2
0
static void common_exit_handler(int sSignal, bool tType)
{
	signal(sSignal, SIG_DFL);

	if (getpid() != controlling_pid) raise(sSignal);


	if (!handling_error)
	{
	handling_error = true;

	if (tType)
    log_server_abnormal_error(getpid(), sSignal, strsignal(sSignal));

	else
    log_server_terminate(getpid(), sSignal, strsignal(sSignal));

	cleanup_routines();

    #ifdef PARAM_NEW_SIG
    log_server_new_signal(getpid(), PARAM_NEW_SIG, strsignal(PARAM_NEW_SIG));
    #endif
    log_server_controlled_exit(getpid());
	}

	else
    log_server_uncontrolled_exit(getpid());

	//NOTE: this disables logging; don't put it in 'cleanup_routines'
	cleanup_server();

    #ifdef PARAM_NEW_SIG
	signal(PARAM_NEW_SIG, SIG_DFL);
	REGISTER_SIGNAL(PARAM_NEW_SIG, SIG_DFL, log_server_deregister_handler)
	killpg(0, SIGCONT);
	killpg(0, PARAM_NEW_SIG);
    #else
	signal(sSignal, SIG_DFL);
	REGISTER_SIGNAL(sSignal, SIG_DFL, log_server_deregister_handler)
	killpg(0, SIGCONT);
	killpg(0, sSignal);
    #endif
}
예제 #3
0
void register_termination_handlers()
{
    #ifdef SIGTERM
	REGISTER_SIGNAL(SIGTERM, &termination_handler, log_server_register_handler);
    #endif

    #ifdef SIGINT
	REGISTER_SIGNAL(SIGINT, &termination_handler, log_server_register_handler);
    #endif

    #ifdef SIGQUIT
	REGISTER_SIGNAL(SIGQUIT, &termination_handler, log_server_register_handler);
    #endif

    #ifdef SIGHUP
	REGISTER_SIGNAL(SIGHUP, &termination_handler, log_server_register_handler);
    #endif

    #ifdef SIGUSR1
	REGISTER_SIGNAL(SIGUSR1, &ignore_handler, log_server_register_handler);
    #endif

    #ifdef SIGUSR2
	REGISTER_SIGNAL(SIGUSR2, &ignore_handler, log_server_register_handler);
    #endif

    log_server_register_terminate_handlers();
}
예제 #4
0
파일: mybg.cpp 프로젝트: buf1024/mydoc
//注册信号
int reg_sign()
{
    REGISTER_SIGNAL(SIGTERM, sig_handle, true);
    //Kill信号
    REGISTER_SIGNAL(SIGINT, sig_handle, true);
    //终端CTRL-C信号
    REGISTER_SIGNAL(SIGUSR2, SIG_IGN, false);
    //忽略SIGUSR2信号
    REGISTER_SIGNAL(SIGHUP, SIG_IGN, false);
    //忽略SIGHUP信号
    REGISTER_SIGNAL(SIGUSR1, SIG_IGN, false);
    //忽略SIGUSR1信号
    REGISTER_SIGNAL(SIGCHLD, SIG_IGN, false);
    //忽略子进程退出
    //向一个已经关闭的SOCKET send数据,内核会向程序发送一个PIPE信号
    REGISTER_SIGNAL(SIGPIPE, SIG_IGN, false);
    //忽略SIGPIPE信号
    REGISTER_SIGNAL(SIGALRM, SIG_IGN, false);
    //忽略SIGPIPE信号
    return 0;
}
예제 #5
0
void restore_handlers()
{
    #ifdef SIGFPE
	REGISTER_SIGNAL(SIGFPE, SIG_DFL, log_server_deregister_handler)
    #endif

    #ifdef SIGILL
	REGISTER_SIGNAL(SIGILL, SIG_DFL, log_server_deregister_handler)
    #endif

    #ifdef SIGSEGV
	REGISTER_SIGNAL(SIGSEGV, SIG_DFL, log_server_deregister_handler)
    #endif

    #ifdef SIGBUS
	REGISTER_SIGNAL(SIGBUS, SIG_DFL, log_server_deregister_handler)
    #endif

    #ifdef SIGABRT
	REGISTER_SIGNAL(SIGABRT, SIG_DFL, log_server_deregister_handler)
    #endif

    #ifdef SIGIOT
	REGISTER_SIGNAL(SIGIOT, SIG_DFL, log_server_deregister_handler)
    #endif

    #ifdef SIGIO
	REGISTER_SIGNAL(SIGIO, SIG_DFL, log_server_deregister_handler)
    #endif

    #ifdef SIGTRAP
	REGISTER_SIGNAL(SIGTRAP, SIG_DFL, log_server_deregister_handler)
    #endif

    #ifdef SIGEMT
	REGISTER_SIGNAL(SIGEMT, SIG_DFL, log_server_deregister_handler)
    #endif

    #ifdef SIGSTKFLT
	REGISTER_SIGNAL(SIGSTKFLT, SIG_DFL, log_server_register_handler);
    #endif

    #ifdef SIGSYS
	REGISTER_SIGNAL(SIGSYS, SIG_DFL, log_server_deregister_handler)
    #endif

    #ifdef SIGPIPE
	REGISTER_SIGNAL(SIGPIPE, SIG_DFL, log_server_deregister_handler)
    #endif

    #ifdef SIGLOST
	REGISTER_SIGNAL(SIGLOST, SIG_DFL, log_server_deregister_handler)
    #endif

    #ifdef SIGXCPU
	REGISTER_SIGNAL(SIGXCPU, SIG_DFL, log_server_deregister_handler)
    #endif

    #ifdef SIGXFSZ
	REGISTER_SIGNAL(SIGXFSZ, SIG_DFL, log_server_deregister_handler)
    #endif

    #ifdef SIGPIPE
	REGISTER_SIGNAL(SIGPIPE, SIG_DFL, log_server_register_handler);
    #endif

    #ifdef SIGTSTP
	REGISTER_SIGNAL(SIGTSTP, SIG_DFL, log_server_register_handler);
    #endif

    #ifdef SIGTTIN
	REGISTER_SIGNAL(SIGTTIN, SIG_DFL, log_server_register_handler);
    #endif

    #ifdef SIGTTOU
	REGISTER_SIGNAL(SIGTTOU, SIG_DFL, log_server_register_handler);
    #endif

    #ifdef SIGPOLL
	REGISTER_SIGNAL(SIGPOLL, SIG_DFL, log_server_register_handler);
    #endif

    #ifdef SIGPWR
	REGISTER_SIGNAL(SIGPWR, SIG_DFL, log_server_register_handler);
    #endif

    #ifdef SIGINFO
	REGISTER_SIGNAL(SIGINFO, SIG_DFL, log_server_register_handler);
    #endif

    #ifdef SIGUNUSED
	REGISTER_SIGNAL(SIGUNUSED, SIG_DFL, log_server_register_handler);
    #endif

    #ifdef SIGSYS
	REGISTER_SIGNAL(SIGSYS, SIG_DFL, log_server_register_handler);
    #endif

    #ifdef SIGTERM
	REGISTER_SIGNAL(SIGTERM, SIG_DFL, log_server_deregister_handler)
    #endif

    #ifdef SIGINT
	REGISTER_SIGNAL(SIGINT, SIG_DFL, log_server_deregister_handler)
    #endif

    #ifdef SIGQUIT
	REGISTER_SIGNAL(SIGQUIT, SIG_DFL, log_server_deregister_handler)
    #endif

    #ifdef SIGHUP
	REGISTER_SIGNAL(SIGHUP, SIG_DFL, log_server_deregister_handler)
    #endif

    #ifdef SIGUSR1
	REGISTER_SIGNAL(SIGUSR1, SIG_DFL, log_server_register_handler);
    #endif

    #ifdef SIGUSR2
	REGISTER_SIGNAL(SIGUSR2, SIG_DFL, log_server_register_handler);
    #endif

    #ifdef SIGALRM
	REGISTER_SIGNAL(SIGALRM, SIG_DFL, log_server_deregister_handler)
    #endif

    #ifdef SIGVTALRM
	REGISTER_SIGNAL(SIGVTALRM, SIG_DFL, log_server_deregister_handler)
    #endif

    #ifdef SIGPROF
	REGISTER_SIGNAL(SIGPROF, SIG_DFL, log_server_deregister_handler)
    #endif

    log_server_deregister_handlers(getpid());
}
예제 #6
0
void register_abnormal_handlers()
{
    #ifdef SIGFPE
	REGISTER_SIGNAL(SIGFPE, &abnormal_exit_handler, log_server_register_handler);
    #endif

    #ifdef SIGILL
	REGISTER_SIGNAL(SIGILL, &abnormal_exit_handler, log_server_register_handler);
    #endif

    #ifdef SIGSEGV
	REGISTER_SIGNAL(SIGSEGV, &abnormal_exit_handler, log_server_register_handler);
    #endif

    #ifdef SIGBUS
	REGISTER_SIGNAL(SIGBUS, &abnormal_exit_handler, log_server_register_handler);
    #endif

    #ifdef SIGABRT
	REGISTER_SIGNAL(SIGABRT, &abnormal_exit_handler, log_server_register_handler);
    #endif

    #ifdef SIGIOT
	REGISTER_SIGNAL(SIGIOT, &abnormal_exit_handler, log_server_register_handler);
    #endif

    #ifdef SIGIO
	REGISTER_SIGNAL(SIGIO, &abnormal_exit_handler, log_server_register_handler);
    #endif

    #ifdef SIGTRAP
	REGISTER_SIGNAL(SIGTRAP, &abnormal_exit_handler, log_server_register_handler);
    #endif

    #ifdef SIGEMT
	REGISTER_SIGNAL(SIGEMT, &abnormal_exit_handler, log_server_register_handler);
    #endif

    #ifdef SIGSTKFLT
	REGISTER_SIGNAL(SIGSTKFLT, &abnormal_exit_handler, log_server_register_handler);
    #endif

    #ifdef SIGSYS
	REGISTER_SIGNAL(SIGSYS, &abnormal_exit_handler, log_server_register_handler);
    #endif

    #ifdef SIGPIPE
	REGISTER_SIGNAL(SIGPIPE, &ignore_handler, log_server_register_handler);
    #endif

    #ifdef SIGLOST
	REGISTER_SIGNAL(SIGLOST, &abnormal_exit_handler, log_server_register_handler);
    #endif

    #ifdef SIGXCPU
	REGISTER_SIGNAL(SIGXCPU, &abnormal_exit_handler, log_server_register_handler);
    #endif

    #ifdef SIGXFSZ
	REGISTER_SIGNAL(SIGXFSZ, &abnormal_exit_handler, log_server_register_handler);
    #endif

    #ifdef SIGTSTP
	REGISTER_SIGNAL(SIGTSTP, &ignore_handler, log_server_register_handler);
    #endif

    #ifdef SIGTTIN
	REGISTER_SIGNAL(SIGTTIN, &ignore_handler, log_server_register_handler);
    #endif

    #ifdef SIGTTOU
    //NOTE: this signal is required for terminal session handling; don't ignore!
//	REGISTER_SIGNAL(SIGTTOU, &ignore_handler, log_server_register_handler);
    #endif

    #ifdef SIGPIPE
	REGISTER_SIGNAL(SIGPIPE, &ignore_handler, log_server_register_handler);
    #endif

    #ifdef SIGPOLL
	REGISTER_SIGNAL(SIGPOLL, &abnormal_exit_handler, log_server_register_handler);
    #endif

    #ifdef SIGPWR
	REGISTER_SIGNAL(SIGPWR, &abnormal_exit_handler, log_server_register_handler);
    #endif

    #ifdef SIGINFO
	REGISTER_SIGNAL(SIGINFO, &abnormal_exit_handler, log_server_register_handler);
    #endif

    #ifdef SIGUNUSED
	REGISTER_SIGNAL(SIGUNUSED, &abnormal_exit_handler, log_server_register_handler);
    #endif

    #ifdef SIGSYS
	REGISTER_SIGNAL(SIGSYS, &abnormal_exit_handler, log_server_register_handler);
    #endif

    log_server_register_abnormal_handlers();
}