fis-gtm/sr_unix/is_proc_alive.c

64 lines
1.4 KiB
C

/****************************************************************
* *
* Copyright 2001, 2009 Fidelity Information Services, Inc *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
* under a license. If you do not know the terms of *
* the license, please stop and do not read further. *
* *
****************************************************************/
#include "mdef.h"
#include <errno.h>
#include <signal.h>
#ifdef __MVS__
#include <sys/resource.h>
#endif
#include "is_proc_alive.h"
/*
* ----------------------------------------------
* Check if process is still alive
*
* Arguments:
* pid - process ID
* imagecnt- used by VMS, dummy only in UNIX
*
* Return:
* TRUE - Process still alive
* FALSE - Process is gone
* ----------------------------------------------
*/
bool is_proc_alive(int4 pid, int4 imagecnt)
{
int status;
bool ret;
if (0 == pid)
{
assert(FALSE);
return FALSE;
}
# ifdef __MVS__
errno = 0; /* it is possible getpriority returns -1 even in case of success */
status = getpriority(PRIO_PROCESS, (id_t)pid);
if ((-1 == status) && (0 == errno))
status = 0;
# else
status = kill(pid, 0); /* just checking */
# endif
if (status)
{
assert(status == -1 && (errno == EPERM || errno == ESRCH));
if (errno == ESRCH)
ret = FALSE;
else
ret = TRUE;
} else
ret = TRUE;
return ret;
}