Sponsored Content
Full Discussion: wait4
Top Forums Programming wait4 Post 302292276 by jim mcnamara on Friday 27th of February 2009 10:39:29 AM
Old 02-27-2009
I already gave you the answer: getrusage(RUSAGE_CHILDREN...) is cumulative.
Cumulative means: it adds all children together. It reports all values (added together) for all of the children waited for.

wait4 waits for ONE child, it does not add resources used for all children together.

wait4 == one child
getrusage(RUSAGE_CHILDREN...) == all children.

Your example gets almost no printable results but zero because your child process does almost nothing: get created and then call exec. For this one operation on a fast machine, it is possible to be a very small amount of time, smaller than the granularity of the timeval struct.

If you do hundreds of these eventually they add up to a value that displays non-zero.

To see results:

Try having execl() call some tiny C program that does something both pointless and hopefully harmless: opens a process-specific filename, writes to the file, closes the file, then removes the file.

see man tmpnam to be able to create a safe filename. Be sure to remove the file.
 

We Also Found This Discussion For You

1. UNIX for Dummies Questions & Answers

what is diff b/w wait3() and wait4() system call

helo, i read man pages but still confuse about wait3() and wait4() stystem call what is exact diff b/w wait3() and wait4() system call and what is diff b/w waitpid() and wait3() and wait4() Regards, Amit (1 Reply)
Discussion started by: amitpansuria
1 Replies
WAIT4(2)						     Linux Programmer's Manual							  WAIT4(2)

NAME
wait3, wait4 - wait for process to change state, BSD style SYNOPSIS
#include <sys/types.h> #include <sys/time.h> #include <sys/resource.h> #include <sys/wait.h> pid_t wait3(int *status, int options, struct rusage *rusage); pid_t wait4(pid_t pid, int *status, int options, struct rusage *rusage); Feature Test Macro Requirements for glibc (see feature_test_macros(7)): wait3(): _BSD_SOURCE wait4(): _BSD_SOURCE || _XOPEN_SOURCE >= 500 DESCRIPTION
The wait3() and wait4() system calls are similar to waitpid(2), but additionally return resource usage information about the child in the structure pointed to by rusage. Other than the use of the rusage argument, the following wait3() call: wait3(status, options, rusage); is equivalent to: waitpid(-1, status, options); Similarly, the following wait4() call: wait4(pid, status, options, rusage); is equivalent to: waitpid(pid, status, options); In other words, wait3() waits of any child, while wait4() can be used to select a specific child, or children, on which to wait. See wait(2) for further details. If rusage is not NULL, the struct rusage to which it points will be filled with accounting information about the child. See getrusage(2) for details. RETURN VALUE
As for waitpid(2). ERRORS
As for waitpid(2). CONFORMING TO
4.3BSD. NOTES
Including <sys/time.h> is not required these days, but increases portability. (Indeed, <sys/resource.h> defines the rusage structure with fields of type struct timeval defined in <sys/time.h>.) On Linux, wait3() is a library function implemented on top of the wait4() system call. SEE ALSO
fork(2), getrusage(2), sigaction(2), signal(2), wait(2), signal(7) COLOPHON
This page is part of release 3.25 of the Linux man-pages project. A description of the project, and information about reporting bugs, can be found at http://www.kernel.org/doc/man-pages/. Linux 2008-09-28 WAIT4(2)
All times are GMT -4. The time now is 06:02 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy