| 
									
										
										
										
											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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-06-05 14:59:13 +00:00
										 |  |  | jobs | 
					
						
							|  |  |  | echo $? | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-04-17 19:52:44 +00:00
										 |  |  | # should be a job-control-not-enabled error | 
					
						
							|  |  |  | 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 & | 
					
						
							|  |  |  | 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... | 
					
						
							|  |  |  | 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 |