use super::super::c; use linux_raw_sys::general::membarrier_cmd; /// A command for use with [`membarrier`] and [`membarrier_cpu`]. /// /// For `MEMBARRIER_CMD_QUERY`, see [`membarrier_query`]. /// /// [`membarrier`]: crate::process::membarrier /// [`membarrier_cpu`]: crate::process::membarrier_cpu /// [`membarrier_query`]: crate::process::membarrier_query #[derive(Copy, Clone, Eq, PartialEq, Debug)] #[repr(u32)] pub enum MembarrierCommand { /// `MEMBARRIER_CMD_GLOBAL` #[doc(alias = "Shared")] #[doc(alias = "MEMBARRIER_CMD_SHARED")] Global = membarrier_cmd::MEMBARRIER_CMD_GLOBAL as _, /// `MEMBARRIER_CMD_GLOBAL_EXPEDITED` GlobalExpedited = membarrier_cmd::MEMBARRIER_CMD_GLOBAL_EXPEDITED as _, /// `MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED` RegisterGlobalExpedited = membarrier_cmd::MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED as _, /// `MEMBARRIER_CMD_PRIVATE_EXPEDITED` PrivateExpedited = membarrier_cmd::MEMBARRIER_CMD_PRIVATE_EXPEDITED as _, /// `MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED` RegisterPrivateExpedited = membarrier_cmd::MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED as _, /// `MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE` PrivateExpeditedSyncCore = membarrier_cmd::MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE as _, /// `MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE` RegisterPrivateExpeditedSyncCore = membarrier_cmd::MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE as _, /// `MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ` (since Linux 5.10) PrivateExpeditedRseq = membarrier_cmd::MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ as _, /// `MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ` (since Linux 5.10) RegisterPrivateExpeditedRseq = membarrier_cmd::MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ as _, } /// A resource value for use with [`getrlimit`], [`setrlimit`], and /// [`prlimit`]. /// /// [`getrlimit`]: crate::process::getrlimit /// [`setrlimit`]: crate::process::setrlimit /// [`prlimit`]: crate::process::prlimit #[derive(Copy, Clone, Debug, Eq, PartialEq)] #[repr(u32)] pub enum Resource { /// `RLIMIT_CPU` Cpu = linux_raw_sys::general::RLIMIT_CPU, /// `RLIMIT_FSIZE` Fsize = linux_raw_sys::general::RLIMIT_FSIZE, /// `RLIMIT_DATA` Data = linux_raw_sys::general::RLIMIT_DATA, /// `RLIMIT_STACK` Stack = linux_raw_sys::general::RLIMIT_STACK, /// `RLIMIT_CORE` Core = linux_raw_sys::general::RLIMIT_CORE, /// `RLIMIT_RSS` Rss = linux_raw_sys::general::RLIMIT_RSS, /// `RLIMIT_NPROC` Nproc = linux_raw_sys::general::RLIMIT_NPROC, /// `RLIMIT_NOFILE` Nofile = linux_raw_sys::general::RLIMIT_NOFILE, /// `RLIMIT_MEMLOCK` Memlock = linux_raw_sys::general::RLIMIT_MEMLOCK, /// `RLIMIT_AS` As = linux_raw_sys::general::RLIMIT_AS, /// `RLIMIT_LOCKS` Locks = linux_raw_sys::general::RLIMIT_LOCKS, /// `RLIMIT_SIGPENDING` Sigpending = linux_raw_sys::general::RLIMIT_SIGPENDING, /// `RLIMIT_MSGQUEUE` Msgqueue = linux_raw_sys::general::RLIMIT_MSGQUEUE, /// `RLIMIT_NICE` Nice = linux_raw_sys::general::RLIMIT_NICE, /// `RLIMIT_RTPRIO` Rtprio = linux_raw_sys::general::RLIMIT_RTPRIO, /// `RLIMIT_RTTIME` Rttime = linux_raw_sys::general::RLIMIT_RTTIME, } /// A signal number for use with [`kill_process`] and [`kill_process_group`]. /// /// [`kill_process`]: crate::process::kill_process /// [`kill_process_group`]: crate::process::kill_process_group #[derive(Copy, Clone, Debug, Eq, PartialEq)] #[repr(u32)] pub enum Signal { /// `SIGHUP` Hup = linux_raw_sys::general::SIGHUP, /// `SIGINT` Int = linux_raw_sys::general::SIGINT, /// `SIGQUIT` Quit = linux_raw_sys::general::SIGQUIT, /// `SIGILL` Ill = linux_raw_sys::general::SIGILL, /// `SIGTRAP` Trap = linux_raw_sys::general::SIGTRAP, /// `SIGABRT`, aka `SIGIOT` #[doc(alias = "Iot")] #[doc(alias = "Abrt")] Abort = linux_raw_sys::general::SIGABRT, /// `SIGBUS` Bus = linux_raw_sys::general::SIGBUS, /// `SIGFPE` Fpe = linux_raw_sys::general::SIGFPE, /// `SIGKILL` Kill = linux_raw_sys::general::SIGKILL, /// `SIGUSR1` Usr1 = linux_raw_sys::general::SIGUSR1, /// `SIGSEGV` Segv = linux_raw_sys::general::SIGSEGV, /// `SIGUSR2` Usr2 = linux_raw_sys::general::SIGUSR2, /// `SIGPIPE` Pipe = linux_raw_sys::general::SIGPIPE, /// `SIGALRM` #[doc(alias = "Alrm")] Alarm = linux_raw_sys::general::SIGALRM, /// `SIGTERM` Term = linux_raw_sys::general::SIGTERM, /// `SIGSTKFLT` #[cfg(not(any(target_arch = "mips", target_arch = "mips64")))] Stkflt = linux_raw_sys::general::SIGSTKFLT, /// `SIGCHLD` #[doc(alias = "Chld")] Child = linux_raw_sys::general::SIGCHLD, /// `SIGCONT` Cont = linux_raw_sys::general::SIGCONT, /// `SIGSTOP` Stop = linux_raw_sys::general::SIGSTOP, /// `SIGTSTP` Tstp = linux_raw_sys::general::SIGTSTP, /// `SIGTTIN` Ttin = linux_raw_sys::general::SIGTTIN, /// `SIGTTOU` Ttou = linux_raw_sys::general::SIGTTOU, /// `SIGURG` Urg = linux_raw_sys::general::SIGURG, /// `SIGXCPU` Xcpu = linux_raw_sys::general::SIGXCPU, /// `SIGXFSZ` Xfsz = linux_raw_sys::general::SIGXFSZ, /// `SIGVTALRM` #[doc(alias = "Vtalrm")] Vtalarm = linux_raw_sys::general::SIGVTALRM, /// `SIGPROF` Prof = linux_raw_sys::general::SIGPROF, /// `SIGWINCH` Winch = linux_raw_sys::general::SIGWINCH, /// `SIGIO`, aka `SIGPOLL` #[doc(alias = "Poll")] Io = linux_raw_sys::general::SIGIO, /// `SIGPWR` #[doc(alias = "Pwr")] Power = linux_raw_sys::general::SIGPWR, /// `SIGSYS`, aka `SIGUNUSED` #[doc(alias = "Unused")] Sys = linux_raw_sys::general::SIGSYS, /// `SIGRTMIN` Rtmin = linux_raw_sys::general::SIGRTMIN, } impl Signal { /// Convert a raw signal number into a `Signal`, if possible. pub fn from_raw(sig: i32) -> Option { match sig as _ { linux_raw_sys::general::SIGHUP => Some(Self::Hup), linux_raw_sys::general::SIGINT => Some(Self::Int), linux_raw_sys::general::SIGQUIT => Some(Self::Quit), linux_raw_sys::general::SIGILL => Some(Self::Ill), linux_raw_sys::general::SIGTRAP => Some(Self::Trap), linux_raw_sys::general::SIGABRT => Some(Self::Abort), linux_raw_sys::general::SIGBUS => Some(Self::Bus), linux_raw_sys::general::SIGFPE => Some(Self::Fpe), linux_raw_sys::general::SIGKILL => Some(Self::Kill), linux_raw_sys::general::SIGUSR1 => Some(Self::Usr1), linux_raw_sys::general::SIGSEGV => Some(Self::Segv), linux_raw_sys::general::SIGUSR2 => Some(Self::Usr2), linux_raw_sys::general::SIGPIPE => Some(Self::Pipe), linux_raw_sys::general::SIGALRM => Some(Self::Alarm), linux_raw_sys::general::SIGTERM => Some(Self::Term), #[cfg(not(any(target_arch = "mips", target_arch = "mips64")))] linux_raw_sys::general::SIGSTKFLT => Some(Self::Stkflt), linux_raw_sys::general::SIGCHLD => Some(Self::Child), linux_raw_sys::general::SIGCONT => Some(Self::Cont), linux_raw_sys::general::SIGSTOP => Some(Self::Stop), linux_raw_sys::general::SIGTSTP => Some(Self::Tstp), linux_raw_sys::general::SIGTTIN => Some(Self::Ttin), linux_raw_sys::general::SIGTTOU => Some(Self::Ttou), linux_raw_sys::general::SIGURG => Some(Self::Urg), linux_raw_sys::general::SIGXCPU => Some(Self::Xcpu), linux_raw_sys::general::SIGXFSZ => Some(Self::Xfsz), linux_raw_sys::general::SIGVTALRM => Some(Self::Vtalarm), linux_raw_sys::general::SIGPROF => Some(Self::Prof), linux_raw_sys::general::SIGWINCH => Some(Self::Winch), linux_raw_sys::general::SIGIO => Some(Self::Io), linux_raw_sys::general::SIGPWR => Some(Self::Power), linux_raw_sys::general::SIGSYS => Some(Self::Sys), linux_raw_sys::general::SIGRTMIN => Some(Self::Rtmin), _ => None, } } } /// `EXIT_SUCCESS` pub const EXIT_SUCCESS: c::c_int = 0; /// `EXIT_FAILURE` pub const EXIT_FAILURE: c::c_int = 1; /// The status value of a child terminated with `SIGABRT`. pub const EXIT_SIGNALED_SIGABRT: c::c_int = 128 + linux_raw_sys::general::SIGABRT as i32; /// A process identifier as a raw integer. pub type RawPid = u32; /// A non-zero process identifier as a raw non-zero integer. pub type RawNonZeroPid = core::num::NonZeroU32; /// A group identifier as a raw integer. pub type RawGid = u32; /// A user identifier as a raw integer. pub type RawUid = u32; /// A CPU identifier as a raw integer. pub type RawCpuid = u32; pub(crate) type RawUname = linux_raw_sys::general::new_utsname; #[repr(C)] #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)] pub(crate) struct RawCpuSet { #[cfg(all(target_pointer_width = "32", not(target_arch = "x86_64")))] pub(crate) bits: [u32; 32], #[cfg(not(all(target_pointer_width = "32", not(target_arch = "x86_64"))))] pub(crate) bits: [u64; 16], } #[inline] pub(crate) fn raw_cpu_set_new() -> RawCpuSet { #[cfg(all(target_pointer_width = "32", not(target_arch = "x86_64")))] { RawCpuSet { bits: [0; 32] } } #[cfg(not(all(target_pointer_width = "32", not(target_arch = "x86_64"))))] { RawCpuSet { bits: [0; 16] } } } pub(crate) const CPU_SETSIZE: usize = 8 * core::mem::size_of::();