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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
use crate::config::Config;
use crate::utils::{errors, Coms};
use std::sync::mpsc::{Receiver, Sender};
use std::thread;
use std::time::Instant;
use sysinfo::{ProcessExt, System, SystemExt};
mod annotator;
pub mod cli;
pub mod config;
pub mod inter;
pub mod utils;
pub fn killer(tx: Sender<()>, rx: Receiver<Coms>) {
let (mut config, mut init_time);
if let Coms::Message(conf, Some(time)) = rx.recv().expect(errors::COM) {
(config, init_time) = (conf, time);
} else {
panic!("{}", errors::COM)
}
while Instant::now().duration_since(init_time) < config.get_work_time() {
if let Ok(Coms::Message(conf, time)) = rx.try_recv() {
config = conf;
if let Some(now) = time {
init_time = now;
}
}
let s = System::new_all();
s.processes()
.iter()
.filter(|(_, process)| config.contains(process.name()))
.for_each(|(_, process)| {
process.kill();
});
thread::sleep(config.get_kill_time());
}
tx.send(()).expect(errors::COM);
loop {
if let Coms::End = rx.recv().expect(errors::COM) {
break;
}
}
}