节点生成过程检查超时
Node spawn process check for timout
我生成的过程有时需要很长时间才能达到 运行,我的问题是有没有办法限制这个过程时间?例如,在 3 分钟后终止此进程?
你可以在暂停时使用process.kill
。但是如果 child 在它被触发之前完成,请记住取消超时。
看看这个例子:
这是 child.sh
3 秒后 returns:
#!/bin/bash
sleep 3
echo DATA FROM CHILD
这是一个生成 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 秒,这比 child 需要的时间短并且 child 会被杀死,但是您可以添加不同的秒数作为命令行参数:
node nodeprogram.js 10
等待 10 秒,这足以让 child 完成。
我生成的过程有时需要很长时间才能达到 运行,我的问题是有没有办法限制这个过程时间?例如,在 3 分钟后终止此进程?
你可以在暂停时使用process.kill
。但是如果 child 在它被触发之前完成,请记住取消超时。
看看这个例子:
这是 child.sh
3 秒后 returns:
#!/bin/bash
sleep 3
echo DATA FROM CHILD
这是一个生成 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 秒,这比 child 需要的时间短并且 child 会被杀死,但是您可以添加不同的秒数作为命令行参数:
node nodeprogram.js 10
等待 10 秒,这足以让 child 完成。