Background and Foreground of a process within a script

I'm not sure if it is even possible but I figured if it was someone here would know how to do it...

I am running a script which starts a bunch of processes in the background but there is one process I would like to bring back to the foreground when complete. Unfortunately the process that I would like in the foreground must be started (and ends up waiting for user input) before some of the other processes. So in my mind I have two potential ways to accomplish this:

1) Start the process in the background and then using the 'fg' command bring it back to the foreground at the end of the script. i.e:

#! /bin/bash

# Using sleeps for an example, obviously this isn't what my script will do

sleep 100 &
sleep 200 &  # <- this is the process I want in the foreground but must be run BEFORE the next line
sleep 300 &

jobs -l  # For demonstration purposes only

fg 2

The output I would get from this is (with set -x):

+ sleep 100
+ sleep 200
+ sleep 300
+ jobs -l
[1]   4071 Running                 sleep 100 &
[2]-  4072 Running                 sleep 200 &
[3]+  4073 Running                 sleep 300 &
+ fg 2
/tmp/new: line 11: fg: no job control

Obviously within the script it tracks the jobs (proved by jobs -l) but it will not bring one of the jobs back the the foreground.

I also don't like this tactic that much because it means my script will not end until my 2nd process ends, if I can even get it working. Not that big of a deal, but there has got to be a better way.

Which leads me to:

2) Is there a way to bring a background process that is started by another shell (same user, or if I must use sudo I will) to the foreground of a different shell?

Using the same script above as an example:

[me@mymachine ~]$ /tmp/new
+ sleep 100
+ sleep 200
+ sleep 300
+ jobs -l
[1]   4205 Running                 sleep 100 &
[2]-  4206 Running                 sleep 200 &
[3]+  4207 Running                 sleep 300 &
+ fg 2
/tmp/new: line 11: fg: no job control
[me@mymachine ~]$ jobs -l
[me@mymachine ~]$

Now I understand that the script starts a new shell so that is why when the script is completed that I cannot see the process in the background with jobs. Is it possible to bring this forward on this shell?

It might be impossible, since it sounds like it could be a nice security flaw, but if it was possible it would be the best fit for my situation.

I am sure some of you are wondering why in the world would I do this, but to keep a long post from being a novel I left that out. Basically the process I want to bring to the foreground allows us to enable some debugging.

Maybe there is a way to pass input to a command that is in the background? That would also solve my issue, but I don't think there is a way to do that either...

My system: I'm running RHEL 5.1 and currently using the bash shell (but I am willing to write the script in a different shell if you think it will make a difference)

Sorry for the long post, but I wanted to explain it correctly. If you have ANY ideas, I'm willing to hear it.

Thanks in advance!!

EDIT - Oh yeah, I didn't write the code to the processes that are actually running, so I don't know about what exactly everything is doing (as far as system calls and such). It was written in sections by different code monkeys and I'm integrating. Also - This is used for debugging only, won't be necessary in the delivered software.

See the "wait" builtin command ("help wait" in bash). You could do

#! /bin/bash

# Using sleeps for an example, obviously this isn't what my script will do

sleep 100 &
sleep 200 &  # <- this is the process I want in the foreground but must be run BEFORE the next line
sleep 300 &

jobs -l  # For demonstration purposes only

wait %2

I don't think this is normally possible without being a debugger. However, it is possible to use screen to attach login sessions to different terminals. But based on what else you described, I don't think that's possible.

It might be in theory possible to use gdb to attach to a process and run a script of debugging commands, such as "b exit(); c ; p value[2]"

UPDATE: I found a quick and easy way to do this. I was approaching it wrong. Rather than running the script normally (./script) all I need to do is source the script (source ./script). This runs it in the current shell and I am able to use jobs to manage the background processes.

Thanks for all the help though!