|
|
@@ -1,36 +1,91 @@
|
|
1
|
1
|
extern crate procinfo;
|
|
2
|
2
|
|
|
|
3
|
+use std::env;
|
|
|
4
|
+use std::process;
|
|
|
5
|
+
|
|
3
|
6
|
mod readproc;
|
|
4
|
7
|
mod pstree;
|
|
5
|
8
|
|
|
6
|
9
|
fn main() {
|
|
7
|
10
|
|
|
8
|
|
- // PID and PPID
|
|
9
|
|
- let pid_tuple = readproc::self_pids().unwrap();
|
|
10
|
|
- let pid = pid_tuple.0;
|
|
11
|
|
- let ppid = pid_tuple.1;
|
|
|
11
|
+ let args:Vec<String> = env::args().collect();
|
|
|
12
|
+
|
|
|
13
|
+ match args.len() {
|
|
|
14
|
+ 1 => {
|
|
|
15
|
+ match readproc::self_pids() {
|
|
|
16
|
+ Ok(pid_tuple) => {
|
|
|
17
|
+ let pid = pid_tuple.0;
|
|
|
18
|
+ let ppid = pid_tuple.1;
|
|
|
19
|
+
|
|
|
20
|
+ // Commands
|
|
|
21
|
+ let pid_command = readproc::get_pid_command(pid).unwrap();
|
|
|
22
|
+ let ppid_command = readproc::get_pid_command(ppid).unwrap();
|
|
|
23
|
+
|
|
|
24
|
+ // Threads
|
|
|
25
|
+ let pid_threads = readproc::get_thread_count(pid).unwrap();
|
|
|
26
|
+ let ppid_threads = readproc::get_thread_count(ppid).unwrap();
|
|
|
27
|
+
|
|
|
28
|
+ // Output for PID and PPID Information
|
|
|
29
|
+ println!("My PID : {} - {} running {} threads", pid, pid_command, pid_threads);
|
|
|
30
|
+ println!("My PPID: {} - {} running {} threads", ppid, ppid_command, ppid_threads);
|
|
|
31
|
+ }
|
|
|
32
|
+ Err(_) => {}
|
|
|
33
|
+ }
|
|
|
34
|
+
|
|
|
35
|
+
|
|
|
36
|
+ match readproc::get_ownprocess_mem() {
|
|
|
37
|
+ Ok(size_tuple) => {
|
|
|
38
|
+ // Memory
|
|
|
39
|
+ let vspace = size_tuple.0;
|
|
|
40
|
+ let code = size_tuple.1;
|
|
|
41
|
+ let data = size_tuple.2;
|
|
|
42
|
+
|
|
|
43
|
+ println!("My mem : {} (vspace), {} (code), {} (data)", vspace, code, data);
|
|
|
44
|
+ }
|
|
|
45
|
+ Err(_) => {}
|
|
|
46
|
+ }
|
|
|
47
|
+
|
|
|
48
|
+ match readproc::get_last_created_command() {
|
|
|
49
|
+ Ok(last_command) => {
|
|
|
50
|
+ // Last Process
|
|
|
51
|
+ println!("Last process created in system was: {}", last_command);
|
|
|
52
|
+ }
|
|
|
53
|
+ Err(_) => {}
|
|
|
54
|
+ }
|
|
|
55
|
+
|
|
|
56
|
+
|
|
|
57
|
+ match readproc::get_task_total() {
|
|
|
58
|
+ Ok(task_total) => {
|
|
|
59
|
+ // Number of tasks
|
|
|
60
|
+ println!("Total number of tasks: {}", task_total);
|
|
|
61
|
+ }
|
|
|
62
|
+ Err(_) => {}
|
|
|
63
|
+ }
|
|
|
64
|
+ }
|
|
|
65
|
+
|
|
|
66
|
+ 2 => {
|
|
|
67
|
+ match args[1].parse::<i32>() {
|
|
|
68
|
+ Ok(pid) => {
|
|
|
69
|
+ if !pstree::print(pid) {
|
|
|
70
|
+ println!("Invalid PID");
|
|
|
71
|
+ process::exit(1);
|
|
|
72
|
+ }
|
|
|
73
|
+ }
|
|
|
74
|
+ Err(_) => {
|
|
|
75
|
+ println!("Error while parsing PID");
|
|
|
76
|
+ process::exit(1);
|
|
|
77
|
+ }
|
|
|
78
|
+ }
|
|
|
79
|
+ }
|
|
12
|
80
|
|
|
13
|
|
- // Commands
|
|
14
|
|
- let pid_command = readproc::get_pid_command(pid).unwrap();
|
|
15
|
|
- let ppid_command = readproc::get_pid_command(ppid).unwrap();
|
|
|
81
|
+ _ => {
|
|
|
82
|
+ println!("Correct usage: no param or param PID");
|
|
|
83
|
+ process::exit(1);
|
|
|
84
|
+ }
|
|
|
85
|
+ }
|
|
16
|
86
|
|
|
17
|
|
- // Threads
|
|
18
|
|
- let pid_threads = readproc::get_thread_count(pid).unwrap();
|
|
19
|
|
- let ppid_threads = readproc::get_thread_count(ppid).unwrap();
|
|
20
|
87
|
|
|
21
|
|
- // Output for PID and PPID Information
|
|
22
|
|
- println!("My PID : {} - {} running {} threads", pid, pid_command, pid_threads);
|
|
23
|
|
- println!("My PPID: {} - {} running {} threads", ppid, ppid_command, ppid_threads);
|
|
24
|
88
|
|
|
25
|
|
- // Memory
|
|
26
|
|
- let vspace = readproc::get_ownprocess_mem().unwrap().0;
|
|
27
|
|
- let code = readproc::get_ownprocess_mem().unwrap().1;
|
|
28
|
|
- let data = readproc::get_ownprocess_mem().unwrap().2;
|
|
29
|
|
- println!("My mem : {} (vspace), {} (code), {} (data)", vspace, code, data);
|
|
30
|
89
|
|
|
31
|
|
- // Last Process
|
|
32
|
|
- println!("Last process created in system was: {}", readproc::get_last_created_command().unwrap());
|
|
33
|
90
|
|
|
34
|
|
- // Number of tasks
|
|
35
|
|
- println!("Total number of tasks: {}", readproc::get_task_total().unwrap());
|
|
36
|
91
|
}
|