mirror of
https://github.com/containers/youki
synced 2025-04-30 13:20:17 +02:00
make String to signal conversion more user friendly by using a Trait.
This commit is contained in:
parent
c22f73ef8b
commit
123c2f6888
@ -4,13 +4,11 @@ use std::path::PathBuf;
|
||||
|
||||
use anyhow::{bail, Result};
|
||||
use clap::Clap;
|
||||
use nix::sys::signal::Signal;
|
||||
|
||||
use crate::cgroups;
|
||||
use crate::container::{Container, ContainerStatus};
|
||||
use crate::utils;
|
||||
use crate::{
|
||||
container::{Container, ContainerStatus},
|
||||
signal,
|
||||
};
|
||||
use nix::sys::signal as nix_signal;
|
||||
|
||||
#[derive(Clap, Debug)]
|
||||
@ -35,7 +33,7 @@ impl Delete {
|
||||
log::debug!("load the container from {:?}", container_root);
|
||||
let mut container = Container::load(container_root)?.refresh_status()?;
|
||||
if container.can_kill() && self.force {
|
||||
let sig = signal::from_str("SIGKILL")?;
|
||||
let sig = Signal::SIGKILL;
|
||||
log::debug!("kill signal {} to {}", sig, container.pid().unwrap());
|
||||
nix_signal::kill(container.pid().unwrap(), sig)?;
|
||||
container = container.update_status(ContainerStatus::Stopped);
|
||||
|
@ -6,7 +6,7 @@ use nix::sys::signal as nix_signal;
|
||||
|
||||
use crate::{
|
||||
container::{Container, ContainerStatus},
|
||||
signal,
|
||||
signal::ToSignal,
|
||||
};
|
||||
|
||||
#[derive(Clap, Debug)]
|
||||
@ -30,7 +30,7 @@ impl Kill {
|
||||
// it might be possible that kill is invoked on a already stopped container etc.
|
||||
let container = Container::load(container_root)?.refresh_status()?;
|
||||
if container.can_kill() {
|
||||
let sig = signal::from_str(self.signal.as_str())?;
|
||||
let sig = self.signal.to_signal()?;
|
||||
log::debug!("kill signal {} to {}", sig, container.pid().unwrap());
|
||||
nix_signal::kill(container.pid().unwrap(), sig)?;
|
||||
container.update_status(ContainerStatus::Stopped).save()?;
|
||||
|
@ -3,40 +3,46 @@
|
||||
use anyhow::{bail, Result};
|
||||
use nix::sys::signal::Signal;
|
||||
|
||||
pub fn from_str(signal: &str) -> Result<Signal> {
|
||||
use Signal::*;
|
||||
Ok(match signal.to_ascii_uppercase().as_str() {
|
||||
"1" | "HUP" | "SIGHUP" => Signal::SIGHUP,
|
||||
"2" | "INT" | "SIGINT" => Signal::SIGINT,
|
||||
"3" | "QUIT" | "SIGQUIT" => Signal::SIGQUIT,
|
||||
"4" | "ILL" | "SIGILL" => Signal::SIGILL,
|
||||
"5" | "BUS" | "SIGBUS" => Signal::SIGBUS,
|
||||
"6" | "ABRT" | "IOT" | "SIGABRT" | "SIGIOT" => Signal::SIGABRT,
|
||||
"7" | "TRAP" | "SIGTRAP" => Signal::SIGTRAP,
|
||||
"8" | "FPE" | "SIGFPE" => Signal::SIGFPE,
|
||||
"9" | "KILL" | "SIGKILL" => Signal::SIGKILL,
|
||||
"10" | "USR1" | "SIGUSR1" => Signal::SIGUSR1,
|
||||
"11" | "SEGV" | "SIGSEGV" => SIGSEGV,
|
||||
"12" | "USR2" | "SIGUSR2" => SIGUSR2,
|
||||
"13" | "PIPE" | "SIGPIPE" => SIGPIPE,
|
||||
"14" | "ALRM" | "SIGALRM" => SIGALRM,
|
||||
"15" | "TERM" | "SIGTERM" => SIGTERM,
|
||||
"16" | "STKFLT" | "SIGSTKFLT" => SIGSTKFLT,
|
||||
"17" | "CHLD" | "SIGCHLD" => SIGCHLD,
|
||||
"18" | "CONT" | "SIGCONT" => SIGCONT,
|
||||
"19" | "STOP" | "SIGSTOP" => SIGSTOP,
|
||||
"20" | "TSTP" | "SIGTSTP" => SIGTSTP,
|
||||
"21" | "TTIN" | "SIGTTIN" => SIGTTIN,
|
||||
"22" | "TTOU" | "SIGTTOU" => SIGTTOU,
|
||||
"23" | "URG" | "SIGURG" => SIGURG,
|
||||
"24" | "XCPU" | "SIGXCPU" => SIGXCPU,
|
||||
"25" | "XFSZ" | "SIGXFSZ" => SIGXFSZ,
|
||||
"26" | "VTALRM" | "SIGVTALRM" => SIGVTALRM,
|
||||
"27" | "PROF" | "SIGPROF" => SIGPROF,
|
||||
"28" | "WINCH" | "SIGWINCH" => SIGWINCH,
|
||||
"29" | "IO" | "SIGIO" => SIGIO,
|
||||
"30" | "PWR" | "SIGPWR" => SIGPWR,
|
||||
"31" | "SYS" | "SIGSYS" => SIGSYS,
|
||||
_ => bail! {"{} is not a valid signal", signal},
|
||||
})
|
||||
pub trait ToSignal<From = Self> {
|
||||
fn to_signal(&self) -> Result<Signal>;
|
||||
}
|
||||
|
||||
impl ToSignal for String {
|
||||
fn to_signal(&self) -> Result<Signal> {
|
||||
use Signal::*;
|
||||
Ok(match self.to_ascii_uppercase().as_str() {
|
||||
"1" | "HUP" | "SIGHUP" => Signal::SIGHUP,
|
||||
"2" | "INT" | "SIGINT" => Signal::SIGINT,
|
||||
"3" | "QUIT" | "SIGQUIT" => Signal::SIGQUIT,
|
||||
"4" | "ILL" | "SIGILL" => Signal::SIGILL,
|
||||
"5" | "BUS" | "SIGBUS" => Signal::SIGBUS,
|
||||
"6" | "ABRT" | "IOT" | "SIGABRT" | "SIGIOT" => Signal::SIGABRT,
|
||||
"7" | "TRAP" | "SIGTRAP" => Signal::SIGTRAP,
|
||||
"8" | "FPE" | "SIGFPE" => Signal::SIGFPE,
|
||||
"9" | "KILL" | "SIGKILL" => Signal::SIGKILL,
|
||||
"10" | "USR1" | "SIGUSR1" => Signal::SIGUSR1,
|
||||
"11" | "SEGV" | "SIGSEGV" => SIGSEGV,
|
||||
"12" | "USR2" | "SIGUSR2" => SIGUSR2,
|
||||
"13" | "PIPE" | "SIGPIPE" => SIGPIPE,
|
||||
"14" | "ALRM" | "SIGALRM" => SIGALRM,
|
||||
"15" | "TERM" | "SIGTERM" => SIGTERM,
|
||||
"16" | "STKFLT" | "SIGSTKFLT" => SIGSTKFLT,
|
||||
"17" | "CHLD" | "SIGCHLD" => SIGCHLD,
|
||||
"18" | "CONT" | "SIGCONT" => SIGCONT,
|
||||
"19" | "STOP" | "SIGSTOP" => SIGSTOP,
|
||||
"20" | "TSTP" | "SIGTSTP" => SIGTSTP,
|
||||
"21" | "TTIN" | "SIGTTIN" => SIGTTIN,
|
||||
"22" | "TTOU" | "SIGTTOU" => SIGTTOU,
|
||||
"23" | "URG" | "SIGURG" => SIGURG,
|
||||
"24" | "XCPU" | "SIGXCPU" => SIGXCPU,
|
||||
"25" | "XFSZ" | "SIGXFSZ" => SIGXFSZ,
|
||||
"26" | "VTALRM" | "SIGVTALRM" => SIGVTALRM,
|
||||
"27" | "PROF" | "SIGPROF" => SIGPROF,
|
||||
"28" | "WINCH" | "SIGWINCH" => SIGWINCH,
|
||||
"29" | "IO" | "SIGIO" => SIGIO,
|
||||
"30" | "PWR" | "SIGPWR" => SIGPWR,
|
||||
"31" | "SYS" | "SIGSYS" => SIGSYS,
|
||||
_ => bail! {"{} is not a valid signal", self},
|
||||
})
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user