Esempio n. 1
0
/*

    Function:   vUtlSignalsChildHandler()

    Purpose:    To handle child signals.

    Parameters: iSignal     signal number

    Globals:    none

    Returns:    void

*/
void vUtlSignalsChildHandler
(
    int iSignal
)
{

    int     iStatus = 0;
    pid_t   zPid = 0;


    /* Give the kid a decent burial */
    while ( (zPid = s_waitpid(-1, &iStatus, WNOHANG)) > 0 ) {
/*         iUtlLogDebug(UTL_LOG_CONTEXT, " caught child: %d.", (int)zPid); */
    }


    return;

}
Esempio n. 2
0
/* Returns 0 = normal exit(), 1 = Died because of a  Signal, 2 = Unknown */
int proc_wait(pid_t pid, int *code)
{
    int status;

    if (debug > 4)
	fprintf(stderr, "proc_wait(): Before s_waitpid()\n");
    
  Again:
    s_waitpid(pid, &status, 0);
    if (debug > 1)
	fprintf(stderr,
		"Process %d exited, status = %d\n",
		(int) pid,
		status);
    
    if (WIFEXITED(status))
    {
	/* Process called exit() */
	
	*code = WEXITSTATUS(status);
	return PROC_EXIT;
    }
    
    else if (WIFSIGNALED(status))
    {
	/* Process died with a Signal */
	
	*code = WTERMSIG(status);
	return PROC_SIGNAL;
    }
    else if (WIFSTOPPED(status) ||
	     WIFCONTINUED(status))
    {
	goto Again;
    }

    /* Unknown termination reason */
    return PROC_OTHER;
}
Esempio n. 3
0
/*

    Function:   vUtlSignalsPassToChildProcesses()

    Purpose:    To pass the signal to any child processes

    Parameters: iSignal     signal

    Globals:    none

    Returns:    void

*/
void vUtlSignalsPassToChildProcesses
(
    int iSignal
)
{

    int     iStatus = 0;
    pid_t   zPid = 0;


    /* Pass on the signal to any kids */
    if ( (zPid = s_waitpid(-1, &iStatus, WNOHANG)) == 0 ) {
/*         iUtlLogDebug(UTL_LOG_CONTEXT, "s_kill(0, %ld) [%ld][%ld][%ld].", iSignal, s_getpid(), s_getpgrp(), zPid); */
        s_kill(0, iSignal);
    }
/*     else { */
/*         iUtlLogDebug(UTL_LOG_CONTEXT, "zPid [%ld].", zPid); */
/*     } */


    return;

}