void initshellproc() { /* from eval.c: */ { exitstatus = 0; } /* from exec.c: */ { deletefuncs(); } /* from input.c: */ { popallfiles(); } /* from jobs.c: */ { backgndpid = -1; #if JOBS jobctl = 0; #endif } /* from options.c: */ { char *p; for (p = optval ; p < optval + sizeof optval ; p++) *p = 0; } /* from redir.c: */ { clearredir(); } /* from trap.c: */ { char *sm; clear_traps(); for (sm = sigmode ; sm < sigmode + MAXSIG ; sm++) { if (*sm == S_IGN) *sm = S_HARD_IGN; } } /* from var.c: */ { shprocvar(); } }
void initshellproc(void) { /* from alias.c: */ { rmaliases(); } /* from eval.c: */ { exitstatus = 0; } /* from exec.c: */ { deletefuncs(); } /* from input.c: */ { popallfiles(); } /* from jobs.c: */ { backgndpid = -1; #if JOBS jobctl = 0; #endif } /* from options.c: */ { int i; for (i = 0; i < NOPTS; i++) optlist[i].val = 0; optschanged(); } /* from redir.c: */ { clearredir(); } /* from trap.c: */ { char *sm; clear_traps(); for (sm = sigmode ; sm < sigmode + NSIG ; sm++) { if (*sm == S_IGN) *sm = S_HARD_IGN; } } /* from var.c: */ { shprocvar(); } }
void forkchild(struct job *jp, union node *n, int mode, int vforked) { int wasroot; int pgrp; const char *devnull = _PATH_DEVNULL; const char *nullerr = "Can't open %s"; wasroot = rootshell; TRACE(("Child shell %d\n", getpid())); if (!vforked) rootshell = 0; closescript(vforked); clear_traps(vforked); #if JOBS if (!vforked) jobctl = 0; /* do job control only in root shell */ if (wasroot && mode != FORK_NOJOB && mflag) { if (jp == NULL || jp->nprocs == 0) pgrp = getpid(); else pgrp = jp->ps[0].pid; /* This can fail because we are doing it in the parent also */ (void)setpgid(0, pgrp); if (mode == FORK_FG) { if (tcsetpgrp(ttyfd, pgrp) == -1) error("Cannot set tty process group (%s) at %d", strerror(errno), __LINE__); } setsignal(SIGTSTP, vforked); setsignal(SIGTTOU, vforked); } else if (mode == FORK_BG) { ignoresig(SIGINT, vforked); ignoresig(SIGQUIT, vforked); if ((jp == NULL || jp->nprocs == 0) && ! fd0_redirected_p ()) { close(0); if (open(devnull, O_RDONLY) != 0) error(nullerr, devnull); } } #else if (mode == FORK_BG) { ignoresig(SIGINT, vforked); ignoresig(SIGQUIT, vforked); if ((jp == NULL || jp->nprocs == 0) && ! fd0_redirected_p ()) { close(0); if (open(devnull, O_RDONLY) != 0) error(nullerr, devnull); } } #endif if (wasroot && iflag) { setsignal(SIGINT, vforked); setsignal(SIGQUIT, vforked); setsignal(SIGTERM, vforked); } if (!vforked) jobs_invalid = 1; }
void initshellproc(shinstance *psh) { /* from /Volumes/ScratchHFS/bird/kBuild/svn/trunk/src/kash/alias.c: */ { rmaliases(psh); } /* from /Volumes/ScratchHFS/bird/kBuild/svn/trunk/src/kash/eval.c: */ { psh->exitstatus = 0; } /* from /Volumes/ScratchHFS/bird/kBuild/svn/trunk/src/kash/exec.c: */ { deletefuncs(psh); } /* from /Volumes/ScratchHFS/bird/kBuild/svn/trunk/src/kash/input.c: */ { popallfiles(psh); } /* from /Volumes/ScratchHFS/bird/kBuild/svn/trunk/src/kash/jobs.c: */ { psh->backgndpid = -1; #if JOBS psh->jobctl = 0; #endif } /* from /Volumes/ScratchHFS/bird/kBuild/svn/trunk/src/kash/options.c: */ { int i; for (i = 0; psh->optlist[i].name; i++) psh->optlist[i].val = 0; optschanged(psh); } /* from /Volumes/ScratchHFS/bird/kBuild/svn/trunk/src/kash/redir.c: */ { clearredir(psh, 0); } /* from /Volumes/ScratchHFS/bird/kBuild/svn/trunk/src/kash/trap.c: */ { char *sm; clear_traps(psh, 0); for (sm = psh->sigmode ; sm < psh->sigmode + NSIG ; sm++) { if (*sm == S_IGN) *sm = S_HARD_IGN; } } /* from /Volumes/ScratchHFS/bird/kBuild/svn/trunk/src/kash/var.c: */ { shprocvar(psh); } }