From 30e1e3a13dc19c47afc517d1178e1dbf5b401596 Mon Sep 17 00:00:00 2001 From: syn Date: Sun, 9 Feb 2020 19:17:57 +0300 Subject: timeout'ed waiter for process --- src/wait/rusage_ffi.rs | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/wait/rusage_ffi.rs (limited to 'src/wait/rusage_ffi.rs') diff --git a/src/wait/rusage_ffi.rs b/src/wait/rusage_ffi.rs new file mode 100644 index 0000000..5948958 --- /dev/null +++ b/src/wait/rusage_ffi.rs @@ -0,0 +1,53 @@ +use nix::libc; +use std::time::Duration; + +#[derive(Debug)] +pub struct Rusage { + pub ru_utime: Duration, + pub ru_stime: Duration, + pub ru_maxrss: i64, + pub ru_ixrss: i64, + pub ru_idrss: i64, + pub ru_isrss: i64, + pub ru_minflt: i64, + pub ru_majflt: i64, + pub ru_nswap: i64, + pub ru_inblock: i64, + pub ru_oublock: i64, + pub ru_msgsnd: i64, + pub ru_msgrcv: i64, + pub ru_nsignals: i64, + pub ru_nvcsw: i64, + pub ru_nivcsw: i64, +} + +impl From for Rusage { + fn from(usg: libc::rusage) -> Rusage { + const MICROS_IN_SEC: u64 = 1_000_000; + let convert_timeval = |tv: libc::timeval| { + Duration::from_micros( + tv.tv_sec as u64 * MICROS_IN_SEC + + tv.tv_usec as u64 + ) + }; + + Rusage { + ru_utime: convert_timeval(usg.ru_utime), + ru_stime: convert_timeval(usg.ru_stime), + ru_maxrss: usg.ru_maxrss, + ru_ixrss: usg.ru_ixrss, + ru_idrss: usg.ru_idrss, + ru_isrss: usg.ru_isrss, + ru_minflt: usg.ru_minflt, + ru_majflt: usg.ru_majflt, + ru_nswap: usg.ru_nswap, + ru_inblock: usg.ru_inblock, + ru_oublock: usg.ru_oublock, + ru_msgsnd: usg.ru_msgsnd, + ru_msgrcv: usg.ru_msgrcv, + ru_nsignals: usg.ru_nsignals, + ru_nvcsw: usg.ru_nvcsw, + ru_nivcsw: usg.ru_nivcsw, + } + } +} -- cgit v1.2.1-18-gbd029