mirror of
https://github.com/timvisee/lazymc.git
synced 2025-05-19 04:40:22 -07:00
77 lines
1.9 KiB
Rust
77 lines
1.9 KiB
Rust
#[cfg(windows)]
|
|
pub mod windows;
|
|
|
|
use nix::{sys::signal, unistd::Pid};
|
|
|
|
/// Force kill process.
|
|
///
|
|
/// Results in undefined behavior if PID is invalid.
|
|
#[allow(unreachable_code)]
|
|
pub fn force_kill(pid: u32) -> bool {
|
|
#[cfg(unix)]
|
|
return unix_signal(pid, signal::SIGKILL);
|
|
|
|
#[cfg(windows)]
|
|
unsafe {
|
|
return windows::force_kill(pid);
|
|
}
|
|
|
|
unimplemented!("force killing Minecraft server process not implemented on this platform");
|
|
}
|
|
|
|
/// Gracefully kill process.
|
|
/// Results in undefined behavior if PID is invalid.
|
|
///
|
|
/// # Panics
|
|
/// Panics on platforms other than Unix.
|
|
#[allow(unreachable_code, dead_code, unused_variables)]
|
|
pub fn kill_gracefully(pid: u32) -> bool {
|
|
#[cfg(unix)]
|
|
return unix_signal(pid, signal::SIGTERM);
|
|
|
|
unimplemented!(
|
|
"gracefully killing Minecraft server process not implemented on non-Unix platforms"
|
|
);
|
|
}
|
|
|
|
/// Freeze process.
|
|
/// Results in undefined behavior if PID is invaild.
|
|
///
|
|
/// # Panics
|
|
/// Panics on platforms other than Unix.
|
|
#[allow(unreachable_code)]
|
|
pub fn freeze(pid: u32) -> bool {
|
|
#[cfg(unix)]
|
|
return unix_signal(pid, signal::SIGSTOP);
|
|
|
|
unimplemented!(
|
|
"freezing the Minecraft server process is not implemented on non-Unix platforms"
|
|
);
|
|
}
|
|
|
|
/// Unfreeze process.
|
|
/// Results in undefined behavior if PID is invaild.
|
|
///
|
|
/// # Panics
|
|
/// Panics on platforms other than Unix.
|
|
#[allow(unreachable_code)]
|
|
pub fn unfreeze(pid: u32) -> bool {
|
|
#[cfg(unix)]
|
|
return unix_signal(pid, signal::SIGCONT);
|
|
|
|
unimplemented!(
|
|
"unfreezing the Minecraft server process is not implemented on non-Unix platforms"
|
|
);
|
|
}
|
|
|
|
#[cfg(unix)]
|
|
pub fn unix_signal(pid: u32, signal: signal::Signal) -> bool {
|
|
return match signal::kill(Pid::from_raw(pid as i32), signal) {
|
|
Ok(()) => true,
|
|
Err(err) => {
|
|
warn!(target: "lazymc", "Sending {signal} signal to server failed: {err}");
|
|
false
|
|
}
|
|
};
|
|
}
|