sh: Allow multiple operands in wait builtin.
This is only part of the PR; the behaviour for unknown/invalid pids/jobs remains unchanged (aborts the builtin with status 2). PR: 176916 Submitted by: Vadim Goncharov
This commit is contained in:
parent
b303f675df
commit
a4099656c3
@ -95,6 +95,7 @@ static int ttyfd = -1;
|
||||
static void restartjob(struct job *);
|
||||
#endif
|
||||
static void freejob(struct job *);
|
||||
static int waitcmdloop(struct job *);
|
||||
static struct job *getjob(char *);
|
||||
pid_t getjobpgrp(char *);
|
||||
static pid_t dowait(int, struct job *);
|
||||
@ -459,15 +460,26 @@ int
|
||||
waitcmd(int argc __unused, char **argv __unused)
|
||||
{
|
||||
struct job *job;
|
||||
int status, retval;
|
||||
struct job *jp;
|
||||
int retval;
|
||||
|
||||
nextopt("");
|
||||
if (*argptr != NULL) {
|
||||
if (*argptr == NULL)
|
||||
return (waitcmdloop(NULL));
|
||||
|
||||
do {
|
||||
job = getjob(*argptr);
|
||||
} else {
|
||||
job = NULL;
|
||||
}
|
||||
retval = waitcmdloop(job);
|
||||
argptr++;
|
||||
} while (*argptr != NULL);
|
||||
|
||||
return (retval);
|
||||
}
|
||||
|
||||
static int
|
||||
waitcmdloop(struct job *job)
|
||||
{
|
||||
int status, retval;
|
||||
struct job *jp;
|
||||
|
||||
/*
|
||||
* Loop until a process is terminated or stopped, or a SIGINT is
|
||||
|
7
tools/regression/bin/sh/builtins/wait8.0
Normal file
7
tools/regression/bin/sh/builtins/wait8.0
Normal file
@ -0,0 +1,7 @@
|
||||
# $FreeBSD$
|
||||
|
||||
exit 44 & p44=$!
|
||||
exit 45 & p45=$!
|
||||
exit 7 & p7=$!
|
||||
wait "$p44" "$p7" "$p45"
|
||||
[ "$?" = 45 ]
|
Loading…
x
Reference in New Issue
Block a user