projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
include fixes
[unix-history]
/
usr
/
src
/
bin
/
csh
/
proc.c
diff --git
a/usr/src/bin/csh/proc.c
b/usr/src/bin/csh/proc.c
index
aa296f6
..
ee9735d
100644
(file)
--- a/
usr/src/bin/csh/proc.c
+++ b/
usr/src/bin/csh/proc.c
@@
-1,9
+1,9
@@
-static char *sccsid = "@(#)proc.c 4.
8 (Berkeley) 83/02/03
";
+static char *sccsid = "@(#)proc.c 4.
12 (Berkeley) 83/07/01
";
#include "sh.h"
#include "sh.dir.h"
#include "sh.proc.h"
#include "sh.h"
#include "sh.dir.h"
#include "sh.proc.h"
-#include <wait.h>
+#include <
sys/
wait.h>
#include <sys/ioctl.h>
/*
#include <sys/ioctl.h>
/*
@@
-192,6
+192,8
@@
pjwait(pp)
register struct process *fp;
int jobflags, reason;
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)
fp = pp;
do {
if ((fp->p_flags&(PFOREGND|PRUNNING)) == PRUNNING)
@@
-210,7
+212,7
@@
pjwait(pp)
while((fp = (fp->p_friends)) != pp);
if ((jobflags & PRUNNING) == 0)
break;
while((fp = (fp->p_friends)) != pp);
if ((jobflags & PRUNNING) == 0)
break;
- sigpause(
SIGCHLD
);
+ sigpause(
sigblock(0) &~ mask(SIGCHLD)
);
}
sigrelse(SIGCHLD);
if (tpgrp > 0)
}
sigrelse(SIGCHLD);
if (tpgrp > 0)
@@
-254,9
+256,9
@@
dowait()
loop:
sighold(SIGCHLD);
for (pp = proclist.p_next; pp; pp = pp->p_next)
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) {
pp->p_flags&PRUNNING) {
- sigpause(
SIGCHLD
);
+ sigpause(
sigblock(0) &~ mask(SIGCHLD)
);
goto loop;
}
sigrelse(SIGCHLD);
goto loop;
}
sigrelse(SIGCHLD);
@@
-811,6
+813,7
@@
pkill(v, signum)
register struct process *pp, *np;
register int jobflags = 0;
int pid;
register struct process *pp, *np;
register int jobflags = 0;
int pid;
+ char *cp;
extern char *sys_errlist[];
int err = 0;
extern char *sys_errlist[];
int err = 0;
@@
-818,8
+821,9
@@
pkill(v, signum)
sighold(SIGINT);
sighold(SIGCHLD);
while (*v) {
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);
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) {
case SIGTTIN:
case SIGTTOU:
if ((jobflags & PRUNNING) == 0) {
- printf("%s: Already stopped\n",
*v
);
+ printf("%s: Already stopped\n",
cp
);
err++;
goto cont;
}
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);
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 {
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]);
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:
kill(pid, SIGCONT);
}
cont:
+ xfree(cp);
v++;
}
sigrelse(SIGCHLD);
v++;
}
sigrelse(SIGCHLD);