我正在构建一个基本上根据搜索查询(简单字符串)获取图像的机器人,这个机器人需要全天候运行,但必须生成多个机器人&#39 ;对于不同的帐户,我已经完成了机器人,它基本上接受了配置文件并开始循环,但是暂停和停止此过程的最佳方法是什么?
我已经查看了Node的spawn child
函数,我已经查看了RxJs的调度程序,但我不确定哪种方法最好,接近这样的方法。任何见解都会有所帮助,谢谢!
答案 0 :(得分:0)
根据您的描述,您需要停止整个过程树。解决方案取决于您的代码运行的平台。在Windows上,我们可以运行taskkill
命令来杀死它们,在linux / macos上,我们可以从npm使用tree-kill包。首先,您需要获取要杀死的进程的PID。以下是一个参考实现:
const procTreeKill = require('tree-kill')
const cp = require('child_process')
const onMacOS = () => {
return process.platform === 'darwin'
}
const onLinux = () => {
return process.platform === 'linux'
}
const onWindows = () => {
return process.platform === 'win32'
}
function kill(pid) {
return new Promise(function (resolve, reject) {
if (onWindows()) {
try {
const options = {
stdio: [
'pipe',
'pipe',
'ignore',
]
}
cp.execFile(
'taskkill',
['/T', '/F', '/PID', pid.toString()],
options,
(error, stdout, stderr) => {
if (error) {
return reject(error)
}
return resolve(true)
}
)
} catch (error) {
return reject(error)
}
} else if (onLinux() || onMacOS()) {
try {
procTreeKill(pid, 'SIGKILL', function (error) {
if (error) {
return reject(error)
}
return resolve(true)
})
} catch (error) {
return reject(error)
}
} else {
return reject(new Error('Platform unsupported.'))
}
})
}
当您传递24/7运行进程的PID(机器人的父进程)时,您可以使用此函数终止所有机器人进程树,或者您可以通过其PID传递来终止工作进程。 / p>
答案 1 :(得分:0)
如果通过顺序执行程序nsynjs运行某些功能,则可以运行,暂停和停止某些功能。请参阅this example(和相应的.html)了解如何启动(通过nsynjs.run),暂停(通过nsynWait)和停止(通过ctx.stop)执行。
答案 2 :(得分:0)
我对此特定问题的解决方案是使用child_process.fork
并分叉辅助自动化脚本,并使用.on('message')
来处理来自进程状态的信息。