Background and Foreground of a process within a script


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Background and Foreground of a process within a script
# 1  
Old 09-25-2008
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:

Code:
#! /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):

Code:
+ 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:

Code:
[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.

Last edited by ctruhn; 09-25-2008 at 08:57 PM..
# 2  
Old 09-26-2008
Quote:
Originally Posted by ctruhn
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:
See the "wait" builtin command ("help wait" in bash). You could do
Code:
#! /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

Quote:
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?
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]"
# 3  
Old 10-06-2008
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!
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

[Solved] Background and foreground colors for xterm

Hi all, I used the code given by cfajohnson on this forum to generate background colors for xterm. Thanks cfajohnson... (sorry wasnt allowed to past the complete url) n=200 ## adjust to taste: higher value, lighter background n1=$(( 256 - $n )) bg=$( printf "#%x%x%x\n" $(( $RANDOM % $n1 +... (2 Replies)
Discussion started by: carv_13
2 Replies

2. Shell Programming and Scripting

Move shell script from foreground to background

Hi, Need an urgent help. I have a program executing in foreground. I need to execute it in background and also to remove terminal dependency. Thanks In advance. 116@434 (7 Replies)
Discussion started by: 116@434
7 Replies

3. Shell Programming and Scripting

How can put a background process to the foreground

Hi, guys: I am working on my own shell using c. When I put a process into the background, how can I put it back to the foreground using tcsetpgrp? Thanks (3 Replies)
Discussion started by: tomlee
3 Replies

4. UNIX for Dummies Questions & Answers

Script to start background process and then kill process

What I need to learn is how to use a script that launches background processes, and then kills those processes as needed. The script successfully launches the script. But how do I check to see if the job exists before I kill it? I know my problem is mostly failure to understand parameter... (4 Replies)
Discussion started by: holocene
4 Replies

5. Shell Programming and Scripting

Send Foreground job to background redirecting output

I have many CPU intensive processes running and sometimes I run them in the foreground so that I can see what the output is. I want to send that foreground process to the background, but also have it direct the output to a logfile. I know to send something to the bg I do Ctrl-z on the FG... (6 Replies)
Discussion started by: jhullbuzz
6 Replies

6. UNIX for Advanced & Expert Users

what is the diff b/w background and foreground process

What are all the difference between a Background and Foreground processes ?! A Background process does not have access to STDIN and OUT.. What else ? Is there any detailed description available somewhere ? (5 Replies)
Discussion started by: onequestion
5 Replies

7. UNIX for Advanced & Expert Users

make a foreground running process to run background without hang up

I've tried this a long time ago and was successful but could not remember how i did it. Tried ctrl+Z and then used bg % could not figure what i did after to keep it no hangup - not sure if used nohup -p pid, can u plz help me out if this can be done. Any help will be appreciated. (12 Replies)
Discussion started by: pharos467
12 Replies

8. Shell Programming and Scripting

how to get background job to foreground

hi, i am just wondering that wen we give the following code we make a process run in background...can the viceversa be performed?i.e can this be made foreground again # sleep 75& 21751 # (4 Replies)
Discussion started by: sandilya
4 Replies

9. UNIX for Dummies Questions & Answers

set background/foreground color in .profile

I am using a telnet session (VT100) and need to modify my .profile so that it will set the color of the telnet session. I am not using Xterm (ie: can't use .Xdefaults). I am able to change the colors via menu's but need to preset in .profile. Is this possible??? Can't find anything at all on how... (3 Replies)
Discussion started by: dvella
3 Replies

10. UNIX for Dummies Questions & Answers

problems with ctrl-z, to switch foreground, background

my shell is /sbin/sh. i added stty susp '^Z' with the intention of being able to switch between foreground and background. but the result was strange. i had 2 servers. one is sun the os is 8 and the other is hpux v11. both of them had the same shell. but on hpux, it works perfectly fine while... (9 Replies)
Discussion started by: yls177
9 Replies
Login or Register to Ask a Question