use crate::backend::c; /// A signal number for use with [`kill_process`], [`kill_process_group`], /// and [`kill_current_process_group`]. /// /// [`kill_process`]: crate::process::kill_process /// [`kill_process_group`]: crate::process::kill_process_group /// [`kill_current_process_group`]: crate::process::kill_current_process_group #[derive(Copy, Clone, Debug, Eq, PartialEq)] #[repr(i32)] pub enum Signal { /// `SIGHUP` Hup = c::SIGHUP, /// `SIGINT` Int = c::SIGINT, /// `SIGQUIT` Quit = c::SIGQUIT, /// `SIGILL` Ill = c::SIGILL, /// `SIGTRAP` Trap = c::SIGTRAP, /// `SIGABRT`, aka `SIGIOT` #[doc(alias = "Iot")] #[doc(alias = "Abrt")] Abort = c::SIGABRT, /// `SIGBUS` Bus = c::SIGBUS, /// `SIGFPE` Fpe = c::SIGFPE, /// `SIGKILL` Kill = c::SIGKILL, /// `SIGUSR1` #[cfg(not(target_os = "vita"))] Usr1 = c::SIGUSR1, /// `SIGSEGV` Segv = c::SIGSEGV, /// `SIGUSR2` #[cfg(not(target_os = "vita"))] Usr2 = c::SIGUSR2, /// `SIGPIPE` Pipe = c::SIGPIPE, /// `SIGALRM` #[doc(alias = "Alrm")] Alarm = c::SIGALRM, /// `SIGTERM` Term = c::SIGTERM, /// `SIGSTKFLT` #[cfg(not(any( bsd, solarish, target_os = "aix", target_os = "haiku", target_os = "nto", target_os = "vita", all( linux_kernel, any( target_arch = "mips", target_arch = "mips32r6", target_arch = "mips64", target_arch = "mips64r6", target_arch = "sparc", target_arch = "sparc64" ), ) )))] Stkflt = c::SIGSTKFLT, /// `SIGCHLD` #[cfg(not(target_os = "vita"))] #[doc(alias = "Chld")] Child = c::SIGCHLD, /// `SIGCONT` #[cfg(not(target_os = "vita"))] Cont = c::SIGCONT, /// `SIGSTOP` #[cfg(not(target_os = "vita"))] Stop = c::SIGSTOP, /// `SIGTSTP` #[cfg(not(target_os = "vita"))] Tstp = c::SIGTSTP, /// `SIGTTIN` #[cfg(not(target_os = "vita"))] Ttin = c::SIGTTIN, /// `SIGTTOU` #[cfg(not(target_os = "vita"))] Ttou = c::SIGTTOU, /// `SIGURG` #[cfg(not(target_os = "vita"))] Urg = c::SIGURG, /// `SIGXCPU` #[cfg(not(target_os = "vita"))] Xcpu = c::SIGXCPU, /// `SIGXFSZ` #[cfg(not(target_os = "vita"))] Xfsz = c::SIGXFSZ, /// `SIGVTALRM` #[cfg(not(target_os = "vita"))] #[doc(alias = "Vtalrm")] Vtalarm = c::SIGVTALRM, /// `SIGPROF` #[cfg(not(target_os = "vita"))] Prof = c::SIGPROF, /// `SIGWINCH` #[cfg(not(target_os = "vita"))] Winch = c::SIGWINCH, /// `SIGIO`, aka `SIGPOLL` #[doc(alias = "Poll")] #[cfg(not(any(target_os = "haiku", target_os = "vita")))] Io = c::SIGIO, /// `SIGPWR` #[cfg(not(any(bsd, target_os = "haiku", target_os = "vita")))] #[doc(alias = "Pwr")] Power = c::SIGPWR, /// `SIGSYS`, aka `SIGUNUSED` #[doc(alias = "Unused")] Sys = c::SIGSYS, /// `SIGEMT` #[cfg(any( bsd, solarish, target_os = "aix", target_os = "hermit", all( linux_kernel, any( target_arch = "mips", target_arch = "mips32r6", target_arch = "mips64", target_arch = "mips64r6", target_arch = "sparc", target_arch = "sparc64" ) ) ))] Emt = c::SIGEMT, /// `SIGINFO` #[cfg(bsd)] Info = c::SIGINFO, /// `SIGTHR` #[cfg(target_os = "freebsd")] #[doc(alias = "Lwp")] Thr = c::SIGTHR, /// `SIGLIBRT` #[cfg(target_os = "freebsd")] Librt = c::SIGLIBRT, } impl Signal { /// Convert a raw signal number into a `Signal`, if possible. pub fn from_raw(sig: c::c_int) -> Option { match sig { c::SIGHUP => Some(Self::Hup), c::SIGINT => Some(Self::Int), c::SIGQUIT => Some(Self::Quit), c::SIGILL => Some(Self::Ill), c::SIGTRAP => Some(Self::Trap), c::SIGABRT => Some(Self::Abort), c::SIGBUS => Some(Self::Bus), c::SIGFPE => Some(Self::Fpe), c::SIGKILL => Some(Self::Kill), #[cfg(not(target_os = "vita"))] c::SIGUSR1 => Some(Self::Usr1), c::SIGSEGV => Some(Self::Segv), #[cfg(not(target_os = "vita"))] c::SIGUSR2 => Some(Self::Usr2), c::SIGPIPE => Some(Self::Pipe), c::SIGALRM => Some(Self::Alarm), c::SIGTERM => Some(Self::Term), #[cfg(not(any( bsd, solarish, target_os = "aix", target_os = "haiku", target_os = "nto", target_os = "vita", all( linux_kernel, any( target_arch = "mips", target_arch = "mips32r6", target_arch = "mips64", target_arch = "mips64r6", target_arch = "sparc", target_arch = "sparc64" ), ) )))] c::SIGSTKFLT => Some(Self::Stkflt), #[cfg(not(target_os = "vita"))] c::SIGCHLD => Some(Self::Child), #[cfg(not(target_os = "vita"))] c::SIGCONT => Some(Self::Cont), #[cfg(not(target_os = "vita"))] c::SIGSTOP => Some(Self::Stop), #[cfg(not(target_os = "vita"))] c::SIGTSTP => Some(Self::Tstp), #[cfg(not(target_os = "vita"))] c::SIGTTIN => Some(Self::Ttin), #[cfg(not(target_os = "vita"))] c::SIGTTOU => Some(Self::Ttou), #[cfg(not(target_os = "vita"))] c::SIGURG => Some(Self::Urg), #[cfg(not(target_os = "vita"))] c::SIGXCPU => Some(Self::Xcpu), #[cfg(not(target_os = "vita"))] c::SIGXFSZ => Some(Self::Xfsz), #[cfg(not(target_os = "vita"))] c::SIGVTALRM => Some(Self::Vtalarm), #[cfg(not(target_os = "vita"))] c::SIGPROF => Some(Self::Prof), #[cfg(not(target_os = "vita"))] c::SIGWINCH => Some(Self::Winch), #[cfg(not(any(target_os = "haiku", target_os = "vita")))] c::SIGIO => Some(Self::Io), #[cfg(not(any(bsd, target_os = "haiku", target_os = "vita")))] c::SIGPWR => Some(Self::Power), c::SIGSYS => Some(Self::Sys), #[cfg(any( bsd, solarish, target_os = "aix", target_os = "hermit", all( linux_kernel, any( target_arch = "mips", target_arch = "mips32r6", target_arch = "mips64", target_arch = "mips64r6", target_arch = "sparc", target_arch = "sparc64" ) ) ))] c::SIGEMT => Some(Self::Emt), #[cfg(bsd)] c::SIGINFO => Some(Self::Info), #[cfg(target_os = "freebsd")] c::SIGTHR => Some(Self::Thr), #[cfg(target_os = "freebsd")] c::SIGLIBRT => Some(Self::Librt), _ => None, } } } #[test] fn test_sizes() { assert_eq_size!(Signal, c::c_int); }