5
/* $Header: /tmp/hpctools/ga/tcgmsg/ipcv4.0/signals.c,v 1.11 2004-04-01 02:04:57 manoj Exp $ */
9
#if defined(SUN) || defined(ALLIANT) || defined(ENCORE) || defined(SEQUENT) || \
10
defined(AIX) || defined(NEXT)
13
#include <sys/types.h>
18
int SR_caught_sigint = 0;
20
#if (defined(ENCORE) || defined(SEQUENT) || defined(ARDENT))
27
# define SIG_ERR (SigType (*)())-1
31
#if (defined(ENCORE) || defined(SEQUENT) || defined(ARDENT)) || (defined(SUN) && !defined(SOLARIS))
32
SigType SigintHandler(sig, code, scp, addr)
34
struct sigcontext *scp;
37
SigType SigintHandler(sig)
42
Error("SigintHandler: signal was caught",(long) sig);
48
Trap the signal SIGINT so that we can propagate error
49
conditions and also tidy up shared system resources in a
50
manner not possible just by killing everyone
53
if ( signal(SIGINT, SigintHandler) == SIG_ERR)
54
Error("TrapSigint: error from signal setting SIGINT",(long) SIGINT);
60
kill -SIGINT all of my beloved children
64
(void) kill((int) SR_pids[SR_numchild], SIGINT);
67
#if (defined(ENCORE) || defined(SEQUENT) || defined(ARDENT)) || (defined(SUN) && !defined(SOLARIS))
68
SigType SigchldHandler(sig, code, scp, addr)
70
struct sigcontext *scp;
73
void SigchldHandler(sig)
79
#if defined(ALLIANT) || defined(ENCORE) || defined(SEQUENT) || defined(NEXT)
83
#if defined(ALLIANT) || defined(ENCORE) || defined(SEQUENT) || defined(NEXT)
84
(void) wait(&ustatus);
85
status = ustatus.w_status;
90
Error("Child process terminated prematurely, status=",(long) status);
95
Trap SIGCHLD so that can tell if children die unexpectedly.
98
if ( signal(SIGCHLD, SigchldHandler) == SIG_ERR)
99
Error("TrapSigchld: error from signal setting SIGCHLD", (long) SIGCHLD);
102
#if (defined(ENCORE) || defined(SEQUENT) || defined(ARDENT)) || (defined(SUN) && !defined(SOLARIS))
103
SigType SigsegvHandler(sig, code, scp, addr)
105
struct sigcontext *scp;
108
SigType SigsegvHandler(sig)
112
SR_caught_sigint = 1;
113
Error("SigsegvHandler: signal was caught",(long) sig);
119
parallel needs to trap the signal SIGSEGV under Solaris
120
that is generated when interrupted in NxtVal
123
if ( signal(SIGSEGV, SigsegvHandler) == SIG_ERR)
124
Error("TrapSigsegv: error from signal setting SIGSEGV", (long) SIGSEGV);
127
#if (defined(ENCORE) || defined(SEQUENT) || defined(ARDENT)) || (defined(SUN) && !defined(SOLARIS))
128
SigType SigtermHandler(sig, code, scp, addr)
130
struct sigcontext *scp;
133
SigType SigtermHandler(sig)
137
SR_caught_sigint = 1;
138
Error("SigtermHandler: signal was caught",(long) sig);
143
parallel needs to trap the SIGTERM for batch jobs
146
if ( signal(SIGTERM, SigtermHandler) == SIG_ERR)
147
Error("TrapSigterm: error from signal setting SIGTERM", (long) SIGTERM);