d后台运行命令

原文
我想在执行算法时,后台运行程序,并要知道程序的pid来结束它.

executeShell("(sleep 10000 && echo \"SLEEP\" >> log) &");//长期程序

while (!interrupted)
{
    //执行算法
    executeShell("(echo \"OK\" >> log) &");
    if (终止条件)
    {
        // 终止后台
    }
    Thread.sleep(1.seconds);
}

最接近的是spawnShell:

import std.stdio;
import std.process;
import core.thread;

void main() {
  auto pid = spawnShell(`(sleep 10000 & echo SLEEP >> log)`);//&&->&来观察
  Thread.sleep(5.seconds);kill(pid);
  writeln("线程: ", wait(pid));
}

正如std.process所说,wait()(等)由平台决定返回值.
可用spawnShell而不是executeShell生成长时间运行进程.spawnShell返回生成稍后可用kill函数干掉的进程的PID.

import core.stdc.signal : SIGINT;
import std.process;

/* 注意,spawnShell不等待产生进程终止*/
Pid pid = spawnShell("(sleep 10000 && echo \"SLEEP\" >> log)");

while (!interrupted)
{
    // 执行算法
    executeShell("(echo \"OK\" >> log) &");
    if (终止条件)
    {
        kill(pid, SIGINT);//用信号干掉进程
        wait(pid);//等待进程关闭
    }
    Thread.sleep(1.seconds);
}
posted @   zjh6  阅读(19)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示