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 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
/*!
The process memory size listing.
`ps-mem` command is listing all process memory size.
# Feature
- minimum support rustc 1.47.0 (18bf6b4f0 2020-10-07)
# Command help
```text
ps-mem --help
```
```text
Usage:
ps-mem [options]
ps-mem [options] <command> {<arg1> <arg2> ...}
print processes memory by sort,
or print one processe memory
Options:
-a, --all all pid (include kernel threads)
--sort <order> sort by <order>: rss|swap|total
--pid <number> output only selected pid
--sleep <number> sleep <number> milli second
-l, --cmdline view command line
-H, --help display this help and exit
-V, --version display version information and exit
-X <x-options> x options. try -X help
Examples:
Show all prosesses memory:
ps-mem --all
Show one prosess memory:
ps-mem --pid 1234
Invoke and show one prosess memory:
ps-mem -- find / -type f
```
# Quick install
1. you can install this into cargo bin path:
```text
cargo install ps-mem
```
2. you can build debian package:
```text
cargo deb
```
and install **.deb** into your local repository of debian package.
# Examples
## Example 1: simple
```text
sudo ps-mem
```
## Example 2: the largest finder
you can see a largest memory process.
```text
sudo ps-mem --sort=total | tail
```
or
```text
sudo ps-mem --sort=total | aki-unbody -t 10
```
## Example 3: show one process memory
You see the process memory size of that pid is 1234.
```text
ps-mem --pid 1234
```
## Example 4: show invoked one prosess memory
You see the process memory size of the invoked find command.
```text
ps-mem find / -type f
```
*/
#[macro_use]
extern crate anyhow;
pub mod conf;
mod run;
mod util;
use flood_tide::HelpVersion;
use runnel::RunnelIoe;
use std::io::Write;
const TRY_HELP_MSG: &str = "Try --help for help.";
/// execute ps-mem
///
/// params:
/// - sioe: stream in/out/err
/// - program: program name. etc. "ps-mem"
/// - args: parameter arguments.
///
/// return:
/// - ok: ()
/// - err: anyhow
///
pub fn execute(sioe: &RunnelIoe, prog_name: &str, args: &[&str]) -> anyhow::Result<()> {
let env = conf::EnvConf::new();
execute_env(sioe, prog_name, args, &env)
}
pub fn execute_env(
sioe: &RunnelIoe,
prog_name: &str,
args: &[&str],
env: &conf::EnvConf,
) -> anyhow::Result<()> {
let conf = match conf::parse_cmdopts(prog_name, args) {
Ok(conf) => conf,
Err(errs) => {
for err in errs.iter().take(1) {
if err.is_help() || err.is_version() {
let _r = sioe.pout().lock().write_fmt(format_args!("{}\n", err));
return Ok(());
}
}
return Err(anyhow!("{}\n{}", errs, TRY_HELP_MSG));
}
};
run::run(sioe, &conf, env)
}