188 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			188 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| # 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
 | |
| 
 | |
| # test out behavior of waiting for background pids -- bug in versions
 | |
| # before 2.03
 | |
| ${THIS_SH} ./jobs3.sub
 | |
| 
 | |
| # test out behavior of using job control notation when job control is not
 | |
| # active
 | |
| ${THIS_SH} ./jobs4.sub
 | |
| 
 | |
| # test out wait -n framework
 | |
| ${THIS_SH} ./jobs5.sub
 | |
| 
 | |
| jobs
 | |
| echo $?
 | |
| 
 | |
| # a no-such-job error, since we can use job control notation without job control
 | |
| 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
 | |
| 
 | |
| 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
 | |
| 
 | |
| # someday this may mean to disown all stopped jobs, but for now it is
 | |
| # an error
 | |
| disown -s
 | |
| 
 | |
| # this is an error -- the job with the pid that is the value of $! is
 | |
| # retained only until a `wait' is performed
 | |
| disown %1
 | |
| 
 | |
| # this, however, is an error
 | |
| disown %2
 | |
| 
 | |
| echo wait-for-non-child
 | |
| wait 1
 | |
| echo $?
 | |
| 
 | |
| exit 1 | exit 2 | exit 3
 | |
| echo $? -- ${PIPESTATUS[@]} -- ${PIPESTATUS[0]} - ${PIPESTATUS[1]} - ${PIPESTATUS[2]}
 | |
| 
 | |
| sleep 300 &
 | |
| sleep300pid=$!
 | |
| sleep 350 &
 | |
| sleep 400 &
 | |
| 
 | |
| jobs
 | |
| 
 | |
| echo running jobs:
 | |
| jobs -r
 | |
| 
 | |
| # should be an error
 | |
| kill -n 1 %4
 | |
| # should be an error
 | |
| jobs %4
 | |
| echo current job:
 | |
| jobs %+
 | |
| echo previous job:
 | |
| jobs %-
 | |
| 
 | |
| 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...
 | |
| kill -n 9 $sleep300pid
 | |
| 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
 | 
