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 = 487371 - root (init/launchd) \-- 48738 myapp PGID - 48737 \--- 48753 sleep PGID - 48737
依赖项
~43KB