1998-04-17 19:52:44 +00:00
|
|
|
# test out %+, jobs -p, and $! agreement in a subshell first
|
|
|
|
${THIS_SH} ./jobs1.sub
|
|
|
|
|
|
|
|
# test out fg/bg failure in a subshell
|
|
|
|
${THIS_SH} ./jobs2.sub
|
|
|
|
|
2000-03-17 21:46:59 +00:00
|
|
|
# test out behavior of waiting for background pids -- bug in versions
|
|
|
|
# before 2.03
|
|
|
|
${THIS_SH} ./jobs3.sub
|
|
|
|
|
2004-07-27 13:29:18 +00:00
|
|
|
# test out behavior of using job control notation when job control is not
|
|
|
|
# active
|
|
|
|
${THIS_SH} ./jobs4.sub
|
|
|
|
|
2014-02-26 09:36:43 -05:00
|
|
|
# test out wait -n framework
|
|
|
|
${THIS_SH} ./jobs5.sub
|
|
|
|
|
1997-06-05 14:59:13 +00:00
|
|
|
jobs
|
|
|
|
echo $?
|
|
|
|
|
2004-07-27 13:29:18 +00:00
|
|
|
# a no-such-job error, since we can use job control notation without job control
|
1998-04-17 19:52:44 +00:00
|
|
|
wait %1
|
|
|
|
|
|
|
|
# make sure we can't fg a job started when job control was not active
|
|
|
|
sleep 30 &
|
|
|
|
pid=$!
|
|
|
|
fg %1
|
|
|
|
# make sure the killed processes don't cause a message
|
|
|
|
exec 5>&2
|
|
|
|
exec 2>/dev/null
|
|
|
|
kill -n 9 $pid
|
|
|
|
wait # make sure we reap the processes while stderr is still redirected
|
|
|
|
exec 2>&5
|
|
|
|
|
1997-06-05 14:59:13 +00:00
|
|
|
echo wait-for-pid
|
|
|
|
sleep 10 &
|
|
|
|
wait $!
|
|
|
|
|
|
|
|
echo wait-errors
|
|
|
|
wait 1-1
|
|
|
|
wait -- -4
|
|
|
|
|
|
|
|
echo wait-for-background-pids
|
|
|
|
sleep 5 &
|
|
|
|
sleep 8 &
|
|
|
|
wait
|
|
|
|
|
|
|
|
echo async list wait-for-background-pids
|
|
|
|
sleep 5 & sleep 8 &
|
|
|
|
wait
|
|
|
|
|
|
|
|
echo async list wait for child
|
|
|
|
sleep 5 & echo forked
|
|
|
|
wait
|
|
|
|
|
|
|
|
echo wait-when-no-children
|
|
|
|
wait
|
|
|
|
|
|
|
|
set -m
|
|
|
|
|
|
|
|
echo wait-for-job
|
|
|
|
sleep 5 &
|
|
|
|
wait %2 # this should be a no-such-job error
|
|
|
|
echo $?
|
|
|
|
wait %1
|
|
|
|
|
|
|
|
echo async list wait-for-job
|
|
|
|
sleep 5 & echo forked
|
|
|
|
wait %1
|
|
|
|
|
|
|
|
echo fg-bg 1
|
|
|
|
sleep 5 &
|
|
|
|
%1
|
|
|
|
|
|
|
|
echo fg-bg 2
|
|
|
|
sleep 5 &
|
|
|
|
fg %%
|
|
|
|
|
|
|
|
echo fg-bg 3
|
|
|
|
sleep 5 &
|
|
|
|
fg %s
|
|
|
|
|
|
|
|
echo fg-bg 4
|
|
|
|
sleep 5 &
|
|
|
|
fg %?ee
|
|
|
|
|
|
|
|
# these next two are error cases
|
|
|
|
echo fg-bg 5
|
|
|
|
sleep 15 &
|
|
|
|
fg %2 # this should be a no-such-job error
|
|
|
|
bg %1 # this should be a `bg background job?' error
|
|
|
|
wait
|
|
|
|
|
|
|
|
# these may someday mean to start the jobs, but not print the line
|
|
|
|
# describing the status, but for now they are errors
|
|
|
|
echo fg-bg 6
|
|
|
|
sleep 5 &
|
|
|
|
fg -s %1
|
|
|
|
bg -s %1
|
|
|
|
wait
|
|
|
|
|
1998-04-17 19:52:44 +00:00
|
|
|
# someday this may mean to disown all stopped jobs, but for now it is
|
1997-06-05 14:59:13 +00:00
|
|
|
# an error
|
1998-04-17 19:52:44 +00:00
|
|
|
disown -s
|
1997-06-05 14:59:13 +00:00
|
|
|
|
1998-04-17 19:52:44 +00:00
|
|
|
# this is an error -- the job with the pid that is the value of $! is
|
|
|
|
# retained only until a `wait' is performed
|
1997-06-05 14:59:13 +00:00
|
|
|
disown %1
|
|
|
|
|
1998-04-17 19:52:44 +00:00
|
|
|
# this, however, is an error
|
|
|
|
disown %2
|
|
|
|
|
1997-06-05 14:59:13 +00:00
|
|
|
echo wait-for-non-child
|
|
|
|
wait 1
|
|
|
|
echo $?
|
|
|
|
|
|
|
|
exit 1 | exit 2 | exit 3
|
|
|
|
echo $? -- ${PIPESTATUS[@]} -- ${PIPESTATUS[0]} - ${PIPESTATUS[1]} - ${PIPESTATUS[2]}
|
|
|
|
|
|
|
|
sleep 300 &
|
2011-11-21 20:51:19 -05:00
|
|
|
sleep300pid=$!
|
1997-06-05 14:59:13 +00:00
|
|
|
sleep 350 &
|
|
|
|
sleep 400 &
|
|
|
|
|
|
|
|
jobs
|
|
|
|
|
|
|
|
echo running jobs:
|
|
|
|
jobs -r
|
|
|
|
|
|
|
|
# should be an error
|
|
|
|
kill -n 1 %4
|
1998-04-17 19:52:44 +00:00
|
|
|
# should be an error
|
|
|
|
jobs %4
|
|
|
|
echo current job:
|
|
|
|
jobs %+
|
|
|
|
echo previous job:
|
|
|
|
jobs %-
|
1997-06-05 14:59:13 +00:00
|
|
|
|
|
|
|
kill -STOP %2
|
|
|
|
sleep 5 # give time for the shell to get the stop notification
|
|
|
|
echo after kill -STOP
|
|
|
|
echo running jobs:
|
|
|
|
jobs -r
|
|
|
|
echo stopped jobs:
|
|
|
|
jobs -s
|
|
|
|
|
|
|
|
disown %1
|
|
|
|
|
|
|
|
echo after disown
|
|
|
|
jobs
|
|
|
|
echo running jobs:
|
|
|
|
jobs -r
|
|
|
|
echo stopped jobs:
|
|
|
|
jobs -s
|
|
|
|
|
|
|
|
kill -s CONT %2
|
|
|
|
echo after kill -s CONT
|
|
|
|
echo running jobs:
|
|
|
|
jobs -r
|
|
|
|
echo stopped jobs:
|
|
|
|
jobs -s
|
|
|
|
|
|
|
|
kill -STOP %3
|
|
|
|
sleep 5 # give time for the shell to get the stop notification
|
|
|
|
echo after kill -STOP, backgrounding %3:
|
|
|
|
bg %3
|
|
|
|
|
|
|
|
disown -h %2
|
|
|
|
|
|
|
|
# make sure the killed processes don't cause a message
|
|
|
|
exec 5>&2
|
|
|
|
exec 2>/dev/null
|
|
|
|
|
|
|
|
echo killing...
|
2011-11-21 20:51:19 -05:00
|
|
|
kill -n 9 $sleep300pid
|
1997-06-05 14:59:13 +00:00
|
|
|
kill -n 9 %2 %3
|
|
|
|
wait # make sure we reap the processes while stderr is still redirected
|
|
|
|
echo done
|
|
|
|
|
|
|
|
exec 2>&5
|
|
|
|
|
|
|
|
sleep 10 &
|
|
|
|
kill -STOP %1
|
|
|
|
sleep 5 # give time for the shell to get the stop notification
|
|
|
|
echo after KILL -STOP, foregrounding %1
|
|
|
|
fg %1
|
|
|
|
|
|
|
|
echo done
|