X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/2f2a064994b149267b4e6f2e4e3643377de981dc..3ffa6b49df5b42905c5290d9e6c4e71de0d15fd6:/usr/src/bin/csh/proc.c diff --git a/usr/src/bin/csh/proc.c b/usr/src/bin/csh/proc.c index 3ad725fd97..ee9735dc9c 100644 --- a/usr/src/bin/csh/proc.c +++ b/usr/src/bin/csh/proc.c @@ -1,9 +1,9 @@ -static char *sccsid = "@(#)proc.c 4.10 (Berkeley) 83/06/11"; +static char *sccsid = "@(#)proc.c 4.12 (Berkeley) 83/07/01"; #include "sh.h" #include "sh.dir.h" #include "sh.proc.h" -#include +#include #include /* @@ -192,6 +192,8 @@ pjwait(pp) register struct process *fp; int jobflags, reason; + while (pp->p_pid != pp->p_jobid) + pp = pp->p_friends; fp = pp; do { if ((fp->p_flags&(PFOREGND|PRUNNING)) == PRUNNING) @@ -254,7 +256,7 @@ dowait() loop: sighold(SIGCHLD); for (pp = proclist.p_next; pp; pp = pp->p_next) - if (pp->p_pid && pp->p_pid == pp->p_jobid && + if (pp->p_pid && /* pp->p_pid == pp->p_jobid && */ pp->p_flags&PRUNNING) { sigpause(sigblock(0) &~ mask(SIGCHLD)); goto loop; @@ -811,6 +813,7 @@ pkill(v, signum) register struct process *pp, *np; register int jobflags = 0; int pid; + char *cp; extern char *sys_errlist[]; int err = 0; @@ -818,8 +821,9 @@ pkill(v, signum) sighold(SIGINT); sighold(SIGCHLD); while (*v) { - if (**v == '%') { - np = pp = pfind(*v); + cp = globone(*v); + if (*cp == '%') { + np = pp = pfind(cp); do jobflags |= np->p_flags; while ((np = np->p_friends) != pp); @@ -830,7 +834,7 @@ pkill(v, signum) case SIGTTIN: case SIGTTOU: if ((jobflags & PRUNNING) == 0) { - printf("%s: Already stopped\n", *v); + printf("%s: Already stopped\n", cp); err++; goto cont; } @@ -838,10 +842,10 @@ pkill(v, signum) killpg(pp->p_jobid, signum); if (signum == SIGTERM || signum == SIGHUP) killpg(pp->p_jobid, SIGCONT); - } else if (!digit(**v)) + } else if (!digit(*cp)) bferr("Arguments should be jobs or process id's"); else { - pid = atoi(*v); + pid = atoi(cp); if (kill(pid, signum) < 0) { printf("%d: ", pid); printf("%s\n", sys_errlist[errno]); @@ -852,6 +856,7 @@ pkill(v, signum) kill(pid, SIGCONT); } cont: + xfree(cp); v++; } sigrelse(SIGCHLD);