【问题标题】:Node spawn process check for timout节点生成过程检查超时
【发布时间】:2016-09-21 19:28:18
【问题描述】:

我已经生成了有时需要很长时间才能运行的进程,我的问题是有没有办法限制这个进程时间?例如在 3 分钟后终止这个进程?

【问题讨论】:

标签: javascript node.js process spawn


【解决方案1】:

您可以在超时时使用process.kill。但是如果孩子在被解雇之前完成,请记住取消超时。

看看这个例子:

这是child.sh 3 秒后返回:

#!/bin/bash
sleep 3
echo DATA FROM CHILD

这是一个生成该子节点的 Node 程序:

var seconds = process.argv[2] || 2;
var spawn = require('child_process').spawn;
var child = spawn('bash', ['child.sh'], {detached: true});
var stopped;
var timeout = setTimeout(() => {
  console.log('Timeout');
  try {
    process.kill(-child.pid, 'SIGKILL');
  } catch (e) {
    console.log('Cannot kill process');
  }
}, seconds*1000);
child.on('error', err => console.log('Error:', err));
child.on('exit', () => { console.log('Stopped'); clearTimeout(timeout); });
child.stdout.on('data', data => console.log(data.toString()));

默认情况下它会等待 2 秒,这比孩子需要的时间短,孩子会被杀死,但您可以添加不同的秒数作为命令行参数:

node nodeprogram.js 10

等待 10 秒,这足以让孩子完成。

【讨论】:

  • 非常感谢!问:process.kill(-self.child.pid, 'SIGKILL');self.child.kill('SIGINT');有什么区别?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多