![]() |
|
|
|
|
|||||||
| Forums | Portal | Register | Forum Rules | FAQ | Contribute | Members List | Arcade | Search | Today's Posts | Mark Forums Read |
| High Level Programming Post questions about C, C++, Java, SQL, and other programming languages here. |
|
|
||||
| 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 |
|
|
Submit Tools | LinkBack | Thread Tools | Display Modes |
|
#1
|
||||
|
||||
|
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! |
| Forum Sponsor | ||
|
|
|
#2
|
||||
|
||||
|
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. |
|
#3
|
||||
|
||||
|
perderabo
yeah what u said makes sense Have a good one A25khan |
||||
| Google The UNIX and Linux Forums |