in modules/fcgid/fcgid_proc_unix.c [815:888]
void proc_print_exit_info(fcgid_procnode *procnode, int exitcode,
apr_exit_why_e exitwhy, server_rec *main_server)
{
const char *diewhy = NULL;
char signal_info[HUGE_STRING_LEN];
int signum = exitcode;
int loglevel = APLOG_INFO;
memset(signal_info, 0, HUGE_STRING_LEN);
/* Reasons to exit */
switch (procnode->diewhy) {
case FCGID_DIE_KILLSELF:
diewhy = "normal exit";
break;
case FCGID_DIE_IDLE_TIMEOUT:
diewhy = "idle timeout";
break;
case FCGID_DIE_LIFETIME_EXPIRED:
diewhy = "lifetime expired";
break;
case FCGID_DIE_BUSY_TIMEOUT:
diewhy = "busy timeout";
break;
case FCGID_DIE_CONNECT_ERROR:
diewhy = "connect error";
break;
case FCGID_DIE_COMM_ERROR:
diewhy = "communication error";
break;
case FCGID_DIE_SHUTDOWN:
diewhy = "shutting down";
break;
default:
loglevel = APLOG_ERR;
diewhy = "unknown";
}
/* Get signal info */
if (APR_PROC_CHECK_SIGNALED(exitwhy)) {
switch (signum) {
case SIGTERM:
case SIGHUP:
case AP_SIG_GRACEFUL:
case SIGKILL:
apr_snprintf(signal_info, HUGE_STRING_LEN - 1,
"get stop signal %d", signum);
break;
default:
loglevel = APLOG_ERR;
if (APR_PROC_CHECK_CORE_DUMP(exitwhy)) {
apr_snprintf(signal_info, HUGE_STRING_LEN - 1,
"get signal %d, possible coredump generated",
signum);
} else {
apr_snprintf(signal_info, HUGE_STRING_LEN - 1,
"get unexpected signal %d", signum);
}
}
}
else if (APR_PROC_CHECK_EXIT(exitwhy)) {
apr_snprintf(signal_info, HUGE_STRING_LEN - 1,
"terminated by calling exit(), return code: %d",
exitcode);
if (procnode->diewhy == FCGID_DIE_CONNECT_ERROR)
diewhy = "server exited";
}
/* Print log now */
ap_log_error(APLOG_MARK, loglevel, 0, main_server,
"mod_fcgid: process %s(%" APR_PID_T_FMT ") exit(%s), %s",
procnode->executable_path, procnode->proc_id.pid, diewhy, signal_info);
}