Add cpu time to ps -l (#2507)

This commit is contained in:
Chris Gillespie 2020-09-06 22:02:45 -07:00 committed by GitHub
parent c9ffd6afc0
commit 3150e70fc7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 38 additions and 1 deletions

1
Cargo.lock generated
View file

@ -3379,6 +3379,7 @@ dependencies = [
"nu-plugin",
"nu-protocol",
"nu-source",
"num-bigint",
]
[[package]]

View file

@ -15,6 +15,8 @@ nu-plugin = {path = "../nu-plugin", version = "0.19.0"}
nu-protocol = {path = "../nu-protocol", version = "0.19.0"}
nu-source = {path = "../nu-source", version = "0.19.0"}
num-bigint = "0.2.6"
futures = {version = "0.3", features = ["compat", "io-compat"]}
futures-timer = "3.0.2"

View file

@ -1,12 +1,14 @@
use futures::{StreamExt, TryStreamExt};
use heim::process::{self as process, Process, ProcessResult};
use heim::units::{information, ratio, Ratio};
use heim::units::{information, ratio, time, Ratio};
use std::usize;
use nu_errors::ShellError;
use nu_protocol::{TaggedDictBuilder, UntaggedValue, Value};
use nu_source::Tag;
use num_bigint::BigInt;
use std::time::Duration;
#[derive(Default)]
@ -68,6 +70,15 @@ pub async fn ps(tag: Tag, long: bool) -> Result<Vec<Value>, ShellError> {
UntaggedValue::filesize(memory.vms().get::<information::byte>()),
);
if long {
if let Ok(cpu_time) = process.cpu_time().await {
let user_time = cpu_time.user().get::<time::nanosecond>().round() as i64;
let system_time = cpu_time.system().get::<time::nanosecond>().round() as i64;
dict.insert_untagged(
"cpu_time",
UntaggedValue::duration(BigInt::from(user_time + system_time)),
)
}
if let Ok(parent_pid) = process.parent_pid().await {
dict.insert_untagged("parent", UntaggedValue::int(parent_pid))
}

View file

@ -22,3 +22,26 @@ Syntax: `ps`
69 │ 8972 │ nu_plugin_ps.exe │ Running │ 58.00986000000000
━━━━┷━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┷━━━━━━━━━┷━━━━━━━━━━━━━━━━━━━
```
Find processes with the highest cpu time
```shell
> ps -l | sort-by cpu_time | last 2
# │ pid │ name │ status │ cpu │ mem │ virtual │ cpu_time │ parent │ exe │ command
───┼─────┼──────────────────┼─────────┼────────┼──────────┼─────────┼───────────────────┼────────┼──────────────────────┼──────────────────────
0 │ 396 │ Google Chrome │ Running │ 0.0000 │ 271.6 MB │ 5.8 GB │ 6hr 20min 28sec │ 1 │ /Applications/Google │ /Applications/Google
│ │ │ │ │ │ │ 173ms 641us 315ns │ │ Chrome.app/Contents/ │ Chrome.app/Contents/
│ │ │ │ │ │ │ │ │ MacOS/Google │ MacOS/Google
│ │ │ │ │ │ │ │ │ Chrome │ Chrome
1 │ 444 │ Google Chrome He │ Running │ 0.0000 │ 398.9 MB │ 5.3 GB │ 10hr 36min 17sec │ 396 │ /Applications/Google │ /Applications/Google
│ │ │ │ │ │ │ 304ms 66us 889ns │ │ Chrome.app/Contents/ │ Chrome.app/Contents/
│ │ │ │ │ │ │ │ │ Frameworks/Google │ Frameworks/Google
│ │ │ │ │ │ │ │ │ Chrome │ Chrome
│ │ │ │ │ │ │ │ │ Framework.framework/ │ Framework.framework/
│ │ │ │ │ │ │ │ │ Versions/84.0.4147.1 │ Versions/84.0.4147.1
│ │ │ │ │ │ │ │ │ 25/Helpers/Google │ 25/Helpers/Google
│ │ │ │ │ │ │ │ │ Chrome Helper │ Chrome Helper
│ │ │ │ │ │ │ │ │ (GPU).app/Contents/M │ (GPU).app/Contents/M
│ │ │ │ │ │ │ │ │ acOS/Google │ acOS/Google
│ │ │ │ │ │ │ │ │ Chrome Helper (GPU) │ Chrome Helper (GPU)
───┴─────┴──────────────────┴─────────┴────────┴──────────┴─────────┴───────────────────┴────────┴──────────────────────┴──────────────────────
```