Return error when kill didn't terminate successfully (#6354)

* Return error when `kill` didn't terminate successfully

Signed-off-by: nibon7 <nibon7@163.com>

* add test

Signed-off-by: nibon7 <nibon7@163.com>

Signed-off-by: nibon7 <nibon7@163.com>
This commit is contained in:
nibon7 2022-08-19 00:58:51 +08:00 committed by GitHub
parent 2b955f82b7
commit 529c98085a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 40 additions and 2 deletions

View File

@ -132,10 +132,37 @@ impl Command for Kill {
.stderr(Stdio::null());
}
let output = cmd.output().expect("failed to execute shell command");
let output = cmd.output().map_err(|e| {
ShellError::GenericError(
"failed to execute shell command".into(),
e.to_string(),
Some(call.head),
None,
Vec::new(),
)
})?;
if !quiet && !output.status.success() {
return Err(ShellError::GenericError(
"process didn't terminate successfully".into(),
String::from_utf8(output.stderr).unwrap_or_default(),
Some(call.head),
None,
Vec::new(),
));
}
let val = String::from(
String::from_utf8(output.stdout)
.expect("failed to convert output to string")
.map_err(|e| {
ShellError::GenericError(
"failed to convert output to string".into(),
e.to_string(),
Some(call.head),
None,
Vec::new(),
)
})?
.trim_end(),
);
if val.is_empty() {

View File

@ -48,6 +48,7 @@ mod open;
mod p;
mod parse;
mod path;
mod platform;
mod prepend;
mod print;
#[cfg(feature = "database")]

View File

@ -0,0 +1,9 @@
use nu_test_support::nu;
#[test]
fn test_kill_invalid_pid() {
let pid = i32::MAX;
let actual = nu!(format!("kill {}", pid));
assert!(actual.err.contains("process didn't terminate successfully"));
}

View File

@ -0,0 +1 @@
mod kill;