xref: /haiku/src/libs/bsd/wait.c (revision 8d2bf6953e851d431fc67de1bc970c40afa79e9f)
1 /*
2  * Copyright 2009, Haiku, Inc. All Rights Reserved.
3  * Distributed under the terms of the MIT License.
4  *
5  * Authors:
6  *		Bruno Albuquerque, bga@bug-br.org.br
7  */
8 
9 #include <OS.h>
10 
11 #include <sys/resource.h>
12 #include <sys/wait.h>
13 
14 
15 pid_t
16 wait3(int *status, int options, struct rusage *rusage)
17 {
18 	return wait4(-1, status, options, rusage);
19 }
20 
21 
22 pid_t
23 wait4(pid_t pid, int *status, int options, struct rusage *rusage)
24 {
25 	pid_t waitPid = waitpid(pid, status, options);
26 	if (waitPid != -1) {
27 		team_usage_info info;
28 
29 		// Obtain info for the process that changed state.
30 		if (get_team_usage_info(waitPid, RUSAGE_SELF, &info) != B_OK)
31 			return -1;
32 
33 		rusage->ru_utime.tv_sec = info.user_time / 1000000;
34 		rusage->ru_utime.tv_usec = info.user_time % 1000000;
35 
36 		rusage->ru_stime.tv_sec = info.kernel_time / 1000000;
37 		rusage->ru_stime.tv_usec = info.kernel_time % 1000000;
38 	}
39 
40 	return waitPid;
41 }
42 
43