a84cce38c336c7009f029a05c2f59b192094581f
Stefan Schuermans add copyright headers and l...

Stefan Schuermans authored 4 years ago

1) /**
2)  * UProcTrace: User-space Process Tracing
3)  * Copyright 2020: Stefan Schuermans, Aachen, Germany <stefan@schuermans.info>
4)  * Copyleft: GNU LESSER GENERAL PUBLIC LICENSE version 3 (see LICENSE)
5)  */
6) 
Stefan Schuermans rename: lwproctrace -> upro...

Stefan Schuermans authored 4 years ago

7) #include "cleaner.h"
8) #include "event.h"
9) #include "timing.h"
Stefan Schuermans formatting

Stefan Schuermans authored 4 years ago

10) #include <uptev/proc_end.h>
Stefan Schuermans rename: lwproctrace -> upro...

Stefan Schuermans authored 4 years ago

11) 
12) #include <uproctrace.pb-c.h>
13) 
14) #include <stdlib.h>
Stefan Schuermans implement user/sys time + m...

Stefan Schuermans authored 4 years ago

15) #include <sys/resource.h>
16) #include <sys/time.h>
Stefan Schuermans rename: lwproctrace -> upro...

Stefan Schuermans authored 4 years ago

17) #include <sys/types.h>
18) #include <unistd.h>
19) 
20) int uptev_proc_end(void **data, size_t *size) {
21)   *data = NULL;
22)   *size = 0;
23) 
24)   uptev_cleaner_t *cleaner = uptev_cleaner_new();
Stefan Schuermans formatting

Stefan Schuermans authored 4 years ago

25)   if (!cleaner) {
Stefan Schuermans rename: lwproctrace -> upro...

Stefan Schuermans authored 4 years ago

26)     return -1;
27)   }
28) 
29)   struct _Uproctrace__Timespec timestamp = UPROCTRACE__TIMESPEC__INIT;
30)   uptev_timing_get_timestamp(&timestamp);
31) 
Stefan Schuermans implement user/sys time + m...

Stefan Schuermans authored 4 years ago

32)   struct _Uproctrace__Timespec cpu_time = UPROCTRACE__TIMESPEC__INIT;
33)   uptev_timing_get_proc_cpu_time(&cpu_time);
Stefan Schuermans rename: lwproctrace -> upro...

Stefan Schuermans authored 4 years ago

34) 
35)   struct _Uproctrace__ProcEnd proc_end = UPROCTRACE__PROC_END__INIT;
36)   proc_end.pid = getpid();
Stefan Schuermans add ppid to end event to im...

Stefan Schuermans authored 3 years ago

37)   // ppid also in end event because child of fork() has no begin event
38)   proc_end.has_ppid = 1;
39)   proc_end.ppid = getppid();
40) 
Stefan Schuermans implement user/sys time + m...

Stefan Schuermans authored 4 years ago

41)   proc_end.cpu_time = &cpu_time;
42) 
43)   struct rusage usage;
44)   struct _Uproctrace__Timespec user_time = UPROCTRACE__TIMESPEC__INIT;
45)   struct _Uproctrace__Timespec sys_time = UPROCTRACE__TIMESPEC__INIT;
46)   if (getrusage(RUSAGE_SELF, &usage) == 0) {
47)     uptev_timing_timeval_to_pb(&usage.ru_utime, &user_time);
48)     proc_end.user_time = &user_time;
49)     uptev_timing_timeval_to_pb(&usage.ru_stime, &sys_time);
50)     proc_end.sys_time = &sys_time;
51)     proc_end.has_max_rss_kb = 1;
52)     proc_end.max_rss_kb = usage.ru_maxrss;
Stefan Schuermans add more fields from getrus...

Stefan Schuermans authored 4 years ago

53)     proc_end.has_min_flt = 1;
54)     proc_end.min_flt = usage.ru_minflt;
55)     proc_end.has_maj_flt = 1;
56)     proc_end.maj_flt = usage.ru_majflt;
57)     proc_end.has_in_block = 1;
58)     proc_end.in_block = usage.ru_inblock;
59)     proc_end.has_ou_block = 1;
60)     proc_end.ou_block = usage.ru_oublock;
61)     proc_end.has_n_v_csw = 1;
62)     proc_end.n_v_csw = usage.ru_nvcsw;
63)     proc_end.has_n_iv_csw = 1;
64)     proc_end.n_iv_csw = usage.ru_nivcsw;
Stefan Schuermans implement user/sys time + m...

Stefan Schuermans authored 4 years ago

65)   }