11-27-2012
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
:(
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
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
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
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
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
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
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
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
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
#!/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
LEARN ABOUT OPENSOLARIS
wait
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)