2 个不稳定版本
0.2.0 | 2024年7月30日 |
---|---|
0.1.0 | 2024年7月19日 |
#1 in #proper
277 每月下载量
25KB
174 行
proc_guard
proc_guard
是一个 Rust 包,旨在使用各种终止策略来管理和确保子进程的适当终止。此包为子进程提供了一个守护者,确保当守护者被丢弃时,进程按照指定的策略终止。
功能
- 不同的终止策略,如等待、发送 Ctrl+C 和杀死进程。
- 确保守护者超出作用域时子进程的适当清理。
- 支持基于阻塞和基于超时的终止方法。
安装
将以下内容添加到您的 Cargo.toml
[dependencies]
proc_guard = "0.2.0"
使用方法
以下是一些说明如何使用 ProcGuard
包的示例。
示例 1:基本使用
use std::process::Command;
use proc_guard::{ProcGuard, ProcessTermination};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let child = if cfg!(target_os = "windows") {
Command::new("timeout").args(["/t", "2"]).spawn()?
} else {
Command::new("sleep").arg("2").spawn()?
};
let guard = ProcGuard::new(child, ProcessTermination::Wait);
// The child process will be waited upon until it exits.
Ok(())
}
示例 2:使用 Ctrl+C 和等待
use std::process::Command;
use proc_guard::{ProcGuard, ProcessTermination};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let child = if cfg!(target_os = "windows") {
Command::new("timeout").args(["/t", "2"]).spawn()?
} else {
Command::new("sleep").arg("2").spawn()?
};
let guard = ProcGuard::new(child, ProcessTermination::CtrlCWait);
// The child process will receive a Ctrl+C signal and will be waited upon until it exits.
Ok(())
}
示例 3:启动一个新的受守护进程
use std::process::Command;
use proc_guard::{ProcGuard, ProcessTermination};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let guard = if cfg!(target_os = "windows") {
ProcGuard::spawn(Command::new("timeout").args(["/t", "2"]), ProcessTermination::CtrlCWait)?
} else {
ProcGuard::spawn(Command::new("sleep").arg("2"), ProcessTermination::CtrlCWait)?
};
// The child process will be managed and terminated as specified.
Ok(())
}
示例 4:释放守护者
use std::process::Command;
use proc_guard::{ProcGuard, ProcessTermination};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let child = if cfg!(target_os = "windows") {
Command::new("timeout").args(["/t", "2"]).spawn()?
} else {
Command::new("sleep").arg("2").spawn()?
};
let guard = ProcGuard::new(child, ProcessTermination::Wait);
let child = guard.release();
// The child process is now unmanaged and must be manually handled.
Ok(())
}
终止策略
ProcessTermination
枚举提供了终止进程的各种策略
Wait
:无限期等待进程退出。WaitTimeout(Duration)
:等待指定时间后进程退出。WaitTimeoutKill(Duration)
:等待指定时间,如果进程尚未退出,则杀死进程。CtrlC
:向进程发送 Ctrl+C 信号,不等待。CtrlCWait
:发送 Ctrl+C 信号,无限期等待进程退出。CtrlCWaitTimeout(Duration)
:发送 Ctrl+C 信号,等待指定时间后进程退出。CtrlCWaitTimeoutKill(Duration)
:发送 Ctrl+C 信号,等待指定时间,如果进程尚未退出,则杀死进程。Kill
:立即杀死进程,不等待。KillWait
:立即杀死进程,无限期等待进程退出。
许可协议
本项目采用 MIT 许可协议。有关详细信息,请参阅 LICENSE 文件。
依赖关系
~0.3–1.2MB
~23K SLoC