The UNIX and Linux Forums  

Go Back   The UNIX and Linux Forums > Top Forums > High Level Programming
Google UNIX.COM


High Level Programming Post questions about C, C++, Java, SQL, and other programming languages here.

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
Access()System call ramkrix High Level Programming 3 03-26-2008 09:42 PM
c system call rangaswamy High Level Programming 1 02-19-2008 10:53 AM
fork() system call arunviswanath UNIX for Dummies Questions & Answers 1 09-19-2007 03:40 AM
how to differentiate system call from library call muru UNIX for Advanced & Expert Users 2 07-19-2007 08:20 PM
Making a system call hardwickj High Level Programming 5 07-06-2006 06:28 PM

Reply
 
Submit Tools LinkBack Thread Tools Display Modes
  #1  
Old 02-11-2004
a25khan's Avatar
Registered User
 

Join Date: Dec 2003
Location: My home :D
Posts: 35
wait system call

hi there,
i had some trivial questions about this program here. i am kinda confused with these, hope you can help me to understand here.

#include<stdio.h>
#include<sys/wait.h>
#include<sys/types.h>
#include<unistd.h>

int main(void)
{
int i,status,waitret;

for(i=0;i<3;i++)
{
if(fork()==0)
{
if(execl("exec2","exec2",0)== -1)
{
fprintf(stderr,"Child: execl failed\n");
exit(1);
}
}

printf("Parent: continuing execution after fork %d\n",i);
}
/** we see above the parent execution lasted till the closing
brace "}". now below we call the status function. what is the
calling process here? i mean which process gave a call to the function status? is it parent? if it's parent then my question is well we called
for fork inside the for loop and i guess it is supposed to run child and
parent process in the loop only. my confusion builds up in the statement
i am about to write. i read in the text "The wait function suspends the
calling process until one of its immediate child processes terminates. The
termination status of the child process is stored in the integer pointed
to by status. If the calling process does not care about the termination
status, and is only interested in waiting until the child process
terminates, status may be given as the null pointer. If a child process
has terminated prior to the call to wait , wait returns immediately with
the status for that process. The process ID of the process that terminated
is returned by wait; if there are no unwaited-for child processes, wait
returns -1." */

for(i=0;i<3;i++)
{
waitret=wait(&status);
/** wait function is going to return an int value, what is
the purpose of using the function here? what is the calling process here?
what is the termination status of child here? in fork we get the pid of
the child, but what exactly is the termination status? is it gona return
1 on success and 0 on failure if for termination? as seeen above the
child terminates prior to the call of wait, so is wait going to return
the status immediately? what if the wait was called from within the
child process? would that still return immediately? if you read above
it said " The process ID of the process that terminated
is returned by wait". whats the use of it, if we can get the pid of the process by using getpid() or getppid()? */
printf("Status from wait: %d (decimal), %x
(hex)\n",status,status);
}
/** another question: i thought the parent ended after the for loop was
over, we called for fork within that loop, so isn't the parent restricted
to live inside the opening and closing braces only!? */
printf("Parent: Ending\n");
}

Appreciate your answer.
Cheers!
Reply With Quote
Forum Sponsor
  #2  
Old 02-11-2004
Perderabo's Avatar
Unix Daemon
 

Join Date: Aug 2001
Location: Washington DC Area
Posts: 8,616
getpid() will return your pid.
getppid() will return your parent's pid.

There is no such thing as a getcpid() to return your child's pid. How could there be? You might have many children. The value returned by wait() is the pid the the particular child that died. There is no other way to get that pid besides one of the wait calls.

The termination status is generally the parameter to exit(). The child does a exit(2), you get a termination status of 2. It can also be a funky value if the process dies because of the default action of a signal.

The parent runs until it hits an exits, or it returns from main(), or it dies as a result of the default action of a signal.
Reply With Quote
  #3  
Old 02-11-2004
a25khan's Avatar
Registered User
 

Join Date: Dec 2003
Location: My home :D
Posts: 35
Thumbs up

perderabo
yeah what u said makes sense . i appreciate your answer. My main questions were about the reason to use wait and does parent continue execution after the loop and your answers were informative
Have a good one
A25khan
Reply With Quote
Google The UNIX and Linux Forums
Reply

Thread Tools
Display Modes




All times are GMT -7. The time now is 02:40 AM.


Powered by: vBulletin, Copyright ©2000 - 2006, Jelsoft Enterprises Limited.
The UNIX and Linux Forums Content Copyright ©1993-2008. All Rights Reserved.Ad Management by RedTyger Visit The Complex Event Processing Blog

Content Relevant URLs by vBSEO 3.2.0