如何在旧版 JavaScript 中调用 Ubuntu 中的 sleep 二进制文件?

我想让我的程序(mydicebot.AppImage)自动执行,每天3次,并且7次连赢后,大约每8个小时执行一次,并且希望不浪费 CPU 资源,8个小时等待后不会使一切变得缓慢。

我知道在 Lua 中,我可以使用以下代码让我的程序进入睡眠状态

function wait(time)
    local duration = os.time() + time
    while os.time() < duration do end
end

但它会消耗我的虚拟机的 CPU 资源

因此,我尝试使用以下代码

function wait(time)
    os.execute('sleep '.. tostring(time))
end

但这也会返回错误,因为我的 Lua 在 javascript 的管道中,所以我尝试了以下代码

function sleep(s)
    local timer = io.popen("sleep " .. s)
    timer:close()
end

但是 io 命令也无法被执行,因为它已经在主 javascript 程序的“管道”中...

所以我想尝试将代码迁移到 javascript 中...我喜欢 os.execute 或 io.popen 的思路,因为它可以暂停 CPU,而不是使用消耗 CPU 的空循环...

在 javascript 中是否有任何类似 os.execute 的工作命令,可以调用 linux/ubuntu 中的原始 sleep 二进制文件?如果可能,兼容 JavaScript 的最低版本...

因为我尝试过以下代码

// 函数实现,单位为秒;
function wait(miao) {
    let shelljs = require('shelljs');
    shelljs.exec( "sleep" + " " + miao , { async : false } ) ;
};

// 调用方法; 休眠60秒,或1分钟;
wait( 60 );

并且返回“let”需要 esversion:6 的错误,我尝试了许多人提供的解决方案,但没有成功...

function msleep(n) {
  Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, n);
}
function sleep(n) {
  msleep(n*1000);
}

sleep(30)

当被调用时也返回 sleep 未定义

var sleeper = require('sleep');
sleeper.sleep(n): 休眠n秒

也返回 sleeper 未定义

如果我使用 async function sleep() {await sleep()await new promise,它们都被视为表达式,即使程序期望分配/函数调用...

我也不能使用 =>let,因为 esversion 6,而 setTimeout 被认为是未定义的。

点赞