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);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现