![]() |
|
|
google unix.com
|
|||||||
| Forums | Register | Forum Rules | Links | Albums | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts and shell scripting languages here. |
More UNIX and Linux Forum Topics You Might Find Helpful
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Kill all child processes on trap | rakeshou | UNIX for Advanced & Expert Users | 2 | 06-12-2008 07:56 AM |
| How to get the exit status | yhacks | Shell Programming and Scripting | 1 | 05-19-2008 09:06 AM |
| Status of child job after parent is killed | anjul_thegreat | High Level Programming | 7 | 06-29-2007 07:36 AM |
| Over-riding TRAP in Child | anijog | Shell Programming and Scripting | 1 | 06-23-2004 11:11 AM |
| ftp exit status. | oracle8 | UNIX for Advanced & Expert Users | 1 | 10-22-2001 12:34 AM |
![]() |
|
|
LinkBack | Thread Tools | Search this Thread | Rate Thread | Display Modes |
|
|
|
||||
|
Getting exit status of child in trap handler
Hi,
I have a trap problem when calling a child script in the background. I know there are a lot of threads here on the issue of traps and signals, I think I have read all the relevant ones, but still haven’t found an answer to my problem. I’m working on Linux or HP, the script as you can see is in ksh. I have written sample scripts for the sake of testing. The parent script is as follows: Code:
#!/bin/ksh -x
trap "echo Sub command exited with $?; exit 1" ERR
./subscript.sh &
saved_pid=$!
while true ; do
sleep 2
done
wait $saved_pid
echo wait returned $?
Code:
#!/bin/ksh -x sleep 1 exit 1 What I need is for the parent script to exit when the child exits with failure. The problem is that I have the following limitations: 1. The child process is run in the background, and my parent script meanwhile continues doing other things (processing the output of the child). The parent is in fact running a loop which will terminate only if the child has successfully terminated and thus provided certain output. Therefore I cannot ‘wait’ for the child process before it finishes its output, I need any failure to stop the parent wherever it is in the script. 2. I cannot simply set the ERR trap to exit, since I have commands in the script which return non-zero status. For example an ‘ls’ command with a pattern that finds no files, and so returns an error. What I really want to do is set the signal handler for CHLD, and check the exit status to see if it is non-zero before exiting. 3. The child process is not mine to change – it is an independent component, and I cannot rely on its contents, other than the fact that it will return a non-zero status when it fails. Things I don’t understand in the behavior of the script: 1. When the child is run in the background, its non-zero exit does not trigger the ERR trap in the parent. 2. How can I see the exit status of the child from the trap handler? As you can see in this script, I tried printing $?, but it prints 0 although I know the child returned 1. Any ideas? Thanks, RO |
|
||||
|
Thanks for your reply!
I see that the 'exit 0' is indeed not executed, but I'm afraid this is still not enough. I need to run the child script in the background so that while it is running and producing ouput the parent script can already start processing this ouput. If I run 'subscript' in the background with the 'exit 0' following, then of course the parent script will simply exit immediately. |
|
||||
|
I don't have ksh to test with, but wouldn't the double quotes cause the $? to be interpolated at the time you declare the trap? I always learned to put traps in single quotes, and quick testing here with bash (Ubuntu Hardy) seems to bear this out.
|
|
||||
|
In the ouput $? is evaluated to 0. I'm not sure at what point its evaluated, but I've tried this with a function as well, something like:
Code:
function err_handler
{
echo The child exited with $?
}
trap err_handler CHLD
|
![]() |
| Bookmarks |
| Tags |
| linux, linux commands, ubuntu |
| Thread Tools | Search this Thread |
| Display Modes | Rate This Thread |
|
|