Linux bash中的守护进程

z4bn682m  于 2023-11-17  发布在  Linux
关注(0)|答案(1)|浏览(123)

与需要在后台跟踪某些内部状态的rust库交互的最方便方式是什么?
例如,我有以下程序:

use tokio::io::AsyncBufReadExt;

#[tokio::main]
async fn main() {
    let mut state = 0;

    let mut reader = tokio::io::BufReader::new(tokio::io::stdin());

    loop {
        let mut buffer = Vec::new();
        reader.read_until(b'\n', &mut buffer).await.unwrap();
        let cmd = std::str::from_utf8(&buffer).unwrap();

        match cmd {
            "get-count\n" => {
                println!("{}", state);
                state += 1;
            }
            _ => {

            }
        }
    }
}

字符串
我可以使用Linux bash通过以下方式与之交互:

cargo run
get-count
0
get-count
1
another-command
get-count
2


但是,这会创建一个阻塞进程,并且在与库交互时,我需要使用来自其他bash命令的输入。
我的目标是将其作为守护进程运行,这样我就可以使用bash以以下方式与它交互:

>> ./start-service
>> ./service-cli get-count
0
>>  ./service-cli get-count
1
>> COUNT=$(./service-cli get-count)
>> echo $COUNT
2


在使用Linux时,最佳实践是什么?有没有使用systemd执行类似操作的示例?

axr492tv

axr492tv1#

您可以使用coproc执行所需的命令,并通过管道文件描述符连接命令的标准输出和标准输入。

coproc cargo run

字符串
然后

echo get-count  >&"${COPROC[1]}"


read -u "${COPROC[0]}" count
echo "$count"

相关问题