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.