Lines Matching refs:sig

39 #define abortsig(sig)	(sig==SIGABRT || sig==SIGBUS || sig==SIGILL || sig==SIGSEGV)
61 void sh_fault(register int sig)
69 if(!(sig&SH_TRAP))
70 signal(sig, sh_fault);
71 sig &= ~SH_TRAP;
73 if(sig==SIGWINCH)
88 shp->savesig = sig;
91 trap = shp->st.trapcom[sig];
92 if(sig==SIGALRM && shp->bltinfun==b_sleep)
97 shp->sigflag[sig] |= SH_SIGTRAP;
101 if(shp->subshell && sig!=SIGINT && sig!=SIGQUIT && sig!=SIGWINCH && sig!=SIGCONT)
103 shp->exitval = SH_EXITSIG|sig;
111 flag = shp->sigflag[sig]&~SH_SIGOFF;
114 if(sig==SIGINT && (shp->trapnote&SH_SIGIGNORE))
124 if(sig==SIGTERM && job.in_critical)
128 shp->lastsig = sig;
129 sigrelease(sig);
134 if(sig==SIGABRT || (abortsig(sig) && (ptr = malloc(1))))
139 sh_done(shp,sig);
144 if(sig <= shp->sigmax)
145 shp->sigflag[sig] |= SH_SIGSET;
147 if(abortsig(sig))
161 shp->lastsig = sig;
167 if(sig==SIGHUP && job.curpgid)
173 shp->lastsig = sig;
176 if(sig==SIGTSTP)
181 sigrelease(sig);
190 action = (*shp->bltinfun)(-sig,(char**)0,(void*)0);
200 if(sig <= shp->sigmax)
201 shp->sigflag[sig] |= flag;
206 sigrelease(sig);
217 register int sig, n;
222 if ((n = SIGRTMIN) > 0 && (sig = SIGRTMAX) > n && sig < SH_TRAP)
225 shp->sigruntime[SH_SIGRTMAX] = sig;
231 sig = (tp->sh_number&((1<<SH_SIGBITS)-1));
232 if (!(sig-- & SH_TRAP))
235 sig = shp->sigruntime[sig];
236 if(sig>n && sig<SH_TRAP)
237 n = sig;
245 for(tp=shtab_signals; sig=tp->sh_number; tp++)
247 n = (sig>>SH_SIGBITS);
248 if((sig &= ((1<<SH_SIGBITS)-1)) > (shp->sigmax+1))
250 sig--;
252 sig = shp->sigruntime[sig];
253 if(sig>=0)
255 shp->sigflag[sig] = n;
257 shp->sigmsg[sig] = (char*)tp->sh_value;
263 * Turn on trap handler for signal <sig>
265 void sh_sigtrap(register int sig)
270 if(sig==0)
272 else if(!((flag=sh.sigflag[sig])&(SH_SIGFAULT|SH_SIGOFF)))
275 if((fun=signal(sig,sh_fault))==SIG_IGN)
277 signal(sig,SIG_IGN);
283 if(sig==SIGALRM && fun!=SIG_DFL && fun!=sh_fault)
284 signal(sig,fun);
287 sh.sigflag[sig] = flag;
296 register int flag, sig = sh.sigmax;
298 for(sig=sh.sigmax; sig>0; sig--)
300 flag = sh.sigflag[sig];
302 sh_sigtrap(sig);
314 register int flag, sig=sh.st.trapmax;
315 while(sig-- > 0)
317 if(trap=sh.st.trapcom[sig])
319 flag = sh.sigflag[sig]&~(SH_SIGTRAP|SH_SIGSET);
324 sh.st.trapcom[sig] = 0;
326 else if(sig && mode>1)
328 if(sig!=SIGCHLD)
329 signal(sig,SIG_IGN);
333 sh.sigflag[sig] = flag;
336 for(sig=SH_DEBUGTRAP-1;sig>=0;sig--)
338 if(trap=sh.st.trap[sig])
342 sh.st.trap[sig] = 0;
355 void sh_sigclear(register int sig)
357 register int flag = sh.sigflag[sig];
363 if(trap=sh.st.trapcom[sig])
367 sh.st.trapcom[sig]=0;
369 sh.sigflag[sig] = flag;
378 register int sig=sh.st.trapmax;
381 sig=0;
409 while(--sig>=0)
412 if(sig==SIGCHLD)
415 if(sh.sigflag[sig]&SH_SIGTRAP)
417 sh.sigflag[sig] &= ~SH_SIGTRAP;
418 if(trap=sh.st.trapcom[sig])
421 if(sig==SIGPIPE && (fp=sfpool((Sfio_t*)0,sh.outpool,SF_WRITE)) && sferror(fp))
423 sh.oldexit = SH_EXITSIG|sig;
503 register int sig=0;
507 shp->exitval |= (sig=shp->lastsig);
523 if(!shp->subshell && (sig=sh_fork(0,NIL(int*))))
527 job_wait(sig);
564 sh_done(shp,sig);
570 sh_done(shp,sig);
587 void sh_done(void *ptr, register int sig)
594 if(sig)
595 savxit = SH_EXITSIG|sig;
621 if((sh_isoption(SH_INTERACTIVE) && shp->login_sh) || (!sh_isoption(SH_INTERACTIVE) && (sig==SIGHUP)))
631 sig = savxit&SH_EXITMASK;
632 if(sig)
635 signal(sig,SIG_DFL);
636 sigrelease(sig);
637 kill(getpid(),sig);