exiting a child without stopping the parent


Login or Register for Dates, Times and to Reply

 
Thread Tools Search this Thread
# 1  
exiting a child without stopping the parent

Greets all. This is using bash/sh on Slackware Linux 12....

I have a parent and MANY children scripts. The parent would be:
Code:
for script in scripts/*.sh; do
   sh $script || exit 1
done

I'm trying to get a child script to quit running without bombing my parent script. This would be the child:
Code:
set -e
variable1=1
variable2=2

if [ "$variable1" = "2" ]; then
   what goes here? I need to keep truckin and skip this script.
elif [ "$variable1" = "1" ]; then
    true
fi

# lots more stuff to run

I could hack around it but surely I'm overlooking something simple. I'm fairly inept with bash so thats my problem here. Thanks for any help in advance...
# 2  
Presumably the for loop in the parent is intended to stop when a child returns an error?

A child should "exit 0" to complete with no errors.
# 3  
Thanks, that was the first thing I tried but that makes the parent crap out with "exit 0"...
# 4  
Take the "|| exit 1" out of your parent.

Put the exit command in the child instead of "what goes here..."

If the condition you're testing for is acceptable, exit 0 if your child script is finished. If it is not acceptible, then exit 1 (or whatever number would be helpful... Obviously you would not exit your script after every test. In those cases, set a flag you can check before exiting.

If you want more than just acceptible/not acceptible status for a test's results then pick a number that means something else.

You would want to somehow document the numbers you choose so that if you forget why your child process returned an exit status of 3 you can understand when reviewing your documentation/comments for the script.
For example, say you were expecting a string of 8 characters, got 9, but it's okay with 9 anyway, your child script might return an exit status of 3. In this case the 3 would mean something like "the script ran succesfully but there was a non critical issue." You could also use 3 to mean it failed because such and such happened...

In your parent script, you can test for the exit status of the child script right after calling the child script.
Don't ignore commonly expected standards though, so if the child script returns 0 then it was successful. If it returns 1 it failed. Beyond that, I believe it is up to you.

It's a good idea to just get in the habit of returning exit status from every script you write.
# 5  
I agree. Thanks for the info. I need to brush up on my trapping instead of always using exit 1 to catch errors.

I have one parent and about 150 children. If I remove the || exit 1 from the parent then I'm in big trouble because the previous child needs to complete sucessfully before the next one is run or it will snowball on me.

I just need to check that $variable = $variable before the child is run (or before the child actually gets going), but $variable is ever changing in each script so I can't set it from the parent.. If $variable != $variable then it needs to be skipped and the next child in line needs to be ran... I'll hack it for now and put it on my TODO list...

Code:
set -e
variable1=1
variable2=2

if [ "$variable1" = "2" ]; then
   bail=yes
elif [ "$variable1" = "1" ]; then
    true
fi

if [ "$bail" != "yes" ]; then
   # lots more stuff to run in this child script
fi

Ugly but will work. Thanks again.
# 6  
Hey... exit 0 does work. The error I get is related to a later command in the parent but I thought it was coming from the child. You are dead right about returning the exit status.

Ughh... One problem down but another one crops up... Smilie

Thanks again guys for your help.
Login or Register for Dates, Times and to Reply

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #233
Difficulty: Easy
The goal of ARPANET, the precursor to the global Internet, was to exploit new computer technologies to meet the needs of military command and control against nuclear threats, achieve survivable control of US nuclear forces, and improve military tactical and management decision making.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Child exiting and not returning to parent script

I am having a parent scripts which reads a file with child scripts name. I need to read one by one child script , execute it and 1. If child script fails send mail to the team with the log file 2. If the child script executes fine then proceed with the next child script execution. #!... (3 Replies)
Discussion started by: nw2unx123
3 Replies

2. UNIX for Dummies Questions & Answers

parent and child directory

does anyone know how to check in an 'if' statement if a particular directory is a child directory of a particular directory? help ~ (2 Replies)
Discussion started by: ymc1g11
2 Replies

3. Shell Programming and Scripting

forking a child process and kill its parent to show that child process has init() as its parent

Hi everyone i am very new to linux , working on bash shell. I am trying to solve the given problem 1. Create a process and then create children using fork 2. Check the Status of the application for successful running. 3. Kill all the process(threads) except parent and first child... (2 Replies)
Discussion started by: vizz_k
2 Replies

4. Homework & Coursework Questions

Need help with deleting childīs parent and child subprocess

1. The problem statement, all variables and given/known data: I need to make an program that in a loop creates one parent and five children with fork(). The problem i'm trying to solve is how to delete the parent and child of the childīs process. 2. Relevant commands, code, scripts,... (0 Replies)
Discussion started by: WhiteFace
0 Replies

5. Shell Programming and Scripting

Parent Script exiting with child script

PARENT SCRIPT #!/bin/ksh # . $HOME/.profile . /etl/estdm2/DEV/scripts/DM_ENV_VARS.ksh DEV DB echo "CALLING CHILD SCRIPT" . /${SCRIPT_DIR}/DM_CHild.ksh -x HRDATA.dat -e $sEnv -d Wait_Time *****THE PARENT SCRIPT EXITS HERE ******** *****whether the file is found or not******* ... (2 Replies)
Discussion started by: sumeet
2 Replies

6. Programming

To share fd between parent and child

i used function fork(). so i made two process. parent process accepted socket fd and writing to shared memory. then now. how can child process share parent's socket fd? is this possible? Thanks in advance (1 Reply)
Discussion started by: andrew.paul
1 Replies

7. UNIX for Advanced & Expert Users

Child Killing Parent

Hi all, I am writing a script which calls other third party scripts that perform numerous actions. I have no control over these scripts. My problem is, one of these scripts seems to execute and do what it is meant to do, but my calling / parent script always exits at that point. I need to... (4 Replies)
Discussion started by: mark007
4 Replies

8. UNIX for Dummies Questions & Answers

kill parent and child

Hello all, I have gone through the search and looked at posting about idle users and killing processes. Here is my question I would like to kill an idle user ( which I can do) but how can I asure that all of his process is also killed whit out tracing his inital start PID. I have tried this on a... (4 Replies)
Discussion started by: larry
4 Replies

9. Filesystems, Disks and Memory

How hard can it be? ps child/parent

:( Since I'm fairly new to the scene and don't have much experience in shell programming, I decided to check out the net for a useful script or two. What I'm looking for is a script that would let me enter a PID and then show the process tree associated with it. So it would display the (grand-)... (2 Replies)
Discussion started by: velde046
2 Replies

10. UNIX for Dummies Questions & Answers

what are parent and child processes all about?

I don't follow what these are... this is what my text says... "When a process is started, a duplicate of that process is created. This new process is called the child and the process that created it is called the parent. The child process then replaces the copy for the code the parent... (1 Reply)
Discussion started by: xyyz
1 Replies

Featured Tech Videos