0
点赞
收藏
分享

微信扫一扫

d后台运行命令

伢赞 2022-06-04 阅读 79


​​原文​​​ 我想在​​执行​​算法时,后台运行程序,并要知道程序的​​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);
}


举报

相关推荐

0 条评论