1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
use std::convert::TryFrom; use std::error; use std::fs; use std::process; use std::time; pub struct ProcessUptime { pub pid: u32, pub uptime: time::Duration, } impl ProcessUptime { pub fn new() -> Result<Self, Box<dyn error::Error>> { let pid = process::id(); let metadata = fs::metadata(format!("/proc/{}", pid))?; let uptime = metadata.modified()?.elapsed()?; Ok(Self { pid, uptime }) } } impl TryFrom<u32> for ProcessUptime { type Error = Box<dyn error::Error>; fn try_from(pid: u32) -> Result<Self, Self::Error> { let metadata = fs::metadata(format!("/proc/{}", pid))?; let uptime = metadata.modified()?.elapsed()?; Ok(Self { pid, uptime }) } }