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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#![allow(dead_code, unused_imports)]
extern crate encoding;
use std::error::Error;
use std::io::{BufReader, BufRead};
use std::process::{self, Command, Stdio};
use encoding::{Encoding, DecoderTrap, EncoderTrap};
use encoding::all::{GBK, UTF_8};
#[allow(dead_code)]
pub fn run_cmd() {
let cmd_str: String;
if cfg!(target_os = "windows") {
cmd_str = "dir d:\\program".to_string();
} else {
cmd_str = "ls -alh".to_string();
}
let output = if cfg!(target_os = "windows") {
Command::new("cmd")
.arg("/c")
.arg(cmd_str)
.arg("/n")
.output()
.expect("cmd exec error!")
} else {
Command::new("sh")
.arg("-c")
.args(["ls","-alh"])
.arg("/home/user ")
.output()
.expect("sh exec error!")
};
let out = if cfg!(target_os = "windows") {
GBK.decode(&output.stdout, DecoderTrap::Strict).unwrap()
} else {
String::from_utf8(output.stdout).unwrap()
};
println!("run_cmd ret: {}", out);
}
#[allow(dead_code)]
pub fn ls() -> Result<(), Box<dyn Error>> {
let output = Command::new("ls").output()?;let out = String::from_utf8(output.stdout).unwrap();
println!("{}", out);
Ok(())
}
#[allow(dead_code)]
pub fn ps() {
let output = Command::new("ps")
.arg("-q")
.arg(process::id().to_string())
.arg("-o")
.arg("%cpu,%mem")
.output()
.unwrap();
let out = String::from_utf8(output.stdout).unwrap();
println!("{}", out);
}
#[allow(dead_code)]
pub unsafe fn xargs() {
let mut cmd = "cat /proc/".to_string();
cmd += &process::id().to_string();
cmd += &"/stat | awk '{print $14,$15,$16,$17}'".to_string();
let output = Command::new("bash")
.arg("-c")
.arg(cmd)
.output()
.unwrap();
let out = String::from_utf8_unchecked(output.stdout);
println!("utime stime cutime cstime");
println!("{}", out);
}
#[allow(dead_code)]
pub fn time() {
let mut fname = "/proc/".to_string();
fname += &process::id().to_string();
fname += &"/stat".to_string();
let child = Command::new("cat")
.arg(fname)
.stdout(Stdio::piped())
.spawn()
.unwrap();
let output = Command::new("awk")
.arg("{print $14,$15,$16,$17}")
.stdin(child.stdout.unwrap())
.output()
.unwrap();
let out = String::from_utf8(output.stdout).unwrap();
println!("utime stime cutime cstime");
println!("{}", out);
}
#[allow(dead_code)]
pub fn iostat() {
let child = Command::new("iostat")
.arg("1")
.stdout(Stdio::piped())
.spawn()
.unwrap();
let mut out = BufReader::new(child.stdout.unwrap());
let mut line = String::new();
while let Ok(_) = out.read_line(&mut line) {
println!("{}", line);
}
}