25个版本
0.2.0 | 2024年7月19日 |
---|---|
0.1.23 | 2024年2月1日 |
0.1.22 | 2023年6月6日 |
0.1.21 | 2023年3月12日 |
0.1.9 | 2019年10月28日 |
57 在 操作系统 类别中
69,075 每月下载量
在 27 个 27 个crate中(直接使用26个) 使用
11KB
81 行
fork
创建与控制终端(守护进程)分离的新进程的库。
为什么?
- 用于守护进程化、分叉、双重分叉进程的最小库。
- daemon(3) 已在 MacOSX 10.5 中弃用,通过使用
fork
和setsid
系统调用,可以创建新方法来实现相同的目标。
示例
创建一个新的测试项目
$ cargo new --bin myapp
要安装
cargo
使用:curl https://sh.rustup.rs -sSf | sh
将 fork
添加为依赖项
cargo add fork
或编辑 myapp/Cargo.toml
并将其添加到 [dependencies]
fork = "0.1"
将以下代码添加到 myapp/main.rs
use fork::{daemon, Fork};
use std::process::Command;
fn main() {
if let Ok(Fork::Child) = daemon(false, false) {
Command::new("sleep")
.arg("300")
.output()
.expect("failed to execute process");
}
}
如果使用
daemon(false, false)
,它将chdir
到/
并关闭标准输入、标准输出和标准错误文件描述符。
测试运行
$ cargo run
使用 ps
检查进程,例如
$ ps -axo ppid,pid,pgid,sess,tty,tpgid,stat,uid,%mem,%cpu,command, | egrep "myapp|sleep|PID"
egrep
用于显示ps
头部
输出应该是类似以下内容
PPID PID PGID SESS TTY TPGID STAT UID %MEM %CPU COMMAND
1 48738 48737 0 ?? 0 S 501 0.0 0.0 target/debug/myapp
48738 48753 48737 0 ?? 0 S 501 0.0 0.0 sleep 300
-
PPID == 1
这是父进程 -
TTY = ??
没有控制终端 -
新的
PGID = 48737
1 - root (init/launchd) \-- 48738 myapp PGID - 48737 \--- 48753 sleep PGID - 48737
依赖项
~43KB