Sponsored Content
Top Forums UNIX for Dummies Questions & Answers Why is the return code of child required by parent ? Post 302736523 by sreyan32 on Tuesday 27th of November 2012 12:08:57 PM
Old 11-27-2012
Question Why is the return code of child required by parent ?

Hello everyone,
I am a complete newbie to UNIX. I am using Debian LXDE 64-bit. I have a question regarding the child and parent process communication. According to wikipedia.org and various other sources, when a child process exits it sends the SIGCHLD signal to its parent process, meaning that the child has finished executing. Then the parent process calls wait() to get the return code of the child process and once it has that it removes the entry of the child process from the process table.
Now when the child process finishes execution before the parent and if the parent fails to retrieve the return code sent by the child the entry of the of the process won't be removed from the table, this is what is known as a zombie process.

Now my questions are-:
1) How will parent process get the return code from the child process? Is it the same value that is returned by the fork() system call in the parent process?
2) Why does the parent need the return code return by the child ? Why is it so necessary to get the code?
3) Why does the parent process need to execute wait() to get the return code? I mean how does wait() or halting execution get it the return code ? And does it execute wait() on itself or on the child process??

Thank You.
 

10 More Discussions You Might Find Interesting

1. 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

2. Shell Programming and Scripting

return valuse from child script to parent script

Hi, I am trying to return a value from child script to a parent script just as a function does. The child script will look for a file and if exists will return 1 else 0. I need to capture the status 1 from child script in the parent script and proceed further. if 0, i need not do... (1 Reply)
Discussion started by: borncrazy
1 Replies

3. Programming

getting the return code of forked child process (ftp)

Hi, From within my C++ program, I fork a child process and execl an ftp session (solaris), like this : std::string szStartCmd = "ftp -i -n -v 192.168.149.31"; int nExecRes = execl("/bin/sh", "sh", "-c", szStartCmd.c_str(), (char *)0); I use 2 pipes to communicate between my... (7 Replies)
Discussion started by: KittyJ
7 Replies

4. Shell Programming and Scripting

How to return control from the child script to the parent one?

I have two shell scripts : A.sh and B.sh A.sh echo "In A" exec B.sh echo "After B" B.sh echo "In B" The output is : In A In B I want the output : In A In B After B (4 Replies)
Discussion started by: suchismitasuchi
4 Replies

5. 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

6. Programming

getting the return from forked child process to parent in C++

This needs to work on HPUX and Linux. I do a fork and create a child process. During execution of the child process, it is possible child become lost or get killed. That is the reason why I create the child process. However if the child process doesnt get killed, I do want to know the return... (2 Replies)
Discussion started by: usustarr
2 Replies

7. 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

8. 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

9. Shell Programming and Scripting

Send correct exit code from child script back to parent

Hello all; hope someone can help me cause I am going crazy trying to find a solution for (what I think is simple) issue...looked hard up and down this forum and tried several "solutions" with no avail...so here's my issue: I have this (parent) script: copylsofdcmcadefttosftpwithmove.sh ... (3 Replies)
Discussion started by: gvolpini
3 Replies

10. Shell Programming and Scripting

How to capture exit code of child script and send it to parent script?

#!/usr/local/bin/bash set -vx /prod/HotelierLinks/palaceLink/bin/PalacefilesWait /prod/HotelierLinks/palaceLink/bin/prodEnvSetup 03212013 & if then echo "fatal error: Palace/HardRock failed!!!!" 1>&2 echo "Palace Failed" | mail -s "Link Failed at Palace/HardRock" -c... (1 Reply)
Discussion started by: aroragaurav.84
1 Replies
wait(3C)						   Standard C Library Functions 						  wait(3C)

NAME
wait - wait for child process to stop or terminate SYNOPSIS
#include <sys/types.h> #include <sys/wait.h> pid_t wait(int *stat_loc); DESCRIPTION
The wait() function will suspend execution of the calling thread until status information for one of its terminated child processes is available, or until delivery of a signal whose action is either to execute a signal-catching function or to terminate the process. If more than one thread is suspended in wait(), waitpid(3C), or waitid(2) awaiting termination of the same process, exactly one thread will return the process status at the time of the target process termination. If status information is available prior to the call to wait(), return will be immediate. If wait() returns because the status of a child process is available, it returns the process ID of the child process. If the calling process specified a non-zero value for stat_loc, the status of the child process is stored in the location pointed to by stat_loc. That status can be evaluated with the macros described on the wait.h(3HEAD) manual page. In the following, status is the object pointed to by stat_loc: o If the child process terminated due to an _exit() call, the low order 8 bits of status will be 0 and the high order 8 bits will contain the low order 7 bits of the argument that the child process passed to _exit(); see exit(2). o If the child process terminated due to a signal, the high order 8 bits of status will be 0 and the low order 7bits will contain the number of the signal that caused the termination. In addition, if WCOREFLG is set, a "core image" will have been produced; see signal.h(3HEAD) and wait.h(3HEAD). One instance of a SIGCHLD signal is queued for each child process whose status has changed. If wait() returns because the status of a child process is available, any pending SIGCHLD signal associated with the process ID of that child process is discarded. Any other pending SIGCHLD signals remain pending. If the calling process has SA_NOCLDWAIT set or has SIGCHLD set to SIG_IGN, and the process has no unwaited children that were transformed into zombie processes, it will block until all of its children terminate, and wait() will fail and set errno to ECHILD. If a parent process terminates without waiting for its child processes to terminate, the parent process ID of each child process is set to 1, with the initialization process inheriting the child processes; see Intro(2). RETURN VALUES
When wait() returns due to a terminated child process, the process ID of the child is returned to the calling process. Otherwise, -1 is returned and errno is set to indicate the error. ERRORS
The wait() function will fail if: ECHILD The calling process has no existing unwaited-for child processes. EINTR The function was interrupted by a signal. USAGE
Since wait() blocks on a stopped child, a calling process wanting to see the return results of such a call should use waitpid(3C) or waitid(2) instead of wait(). The wait() function is implemented as a call to waitpid(-1, stat_loc, 0). ATTRIBUTES
See attributes(5) for descriptions of the following attributes: +-----------------------------+-----------------------------+ | ATTRIBUTE TYPE | ATTRIBUTE VALUE | +-----------------------------+-----------------------------+ |Interface Stability |Standard | +-----------------------------+-----------------------------+ |MT-Level |Async-Signal-Safe | +-----------------------------+-----------------------------+ SEE ALSO
Intro(2), exec(2), exit(2), fork(2), pause(2), waitid(2), ptrace(3C), signal(3C), signal.h(3HEAD), waitpid(3C), wait.h(3HEAD), attributes(5) SunOS 5.11 9 Jun 2004 wait(3C)
All times are GMT -4. The time now is 09:55 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy