2
我已經催生了有時需要很長時間才能運行的過程,我的問題是有沒有辦法限制這個過程時間?例如3分鐘後殺死這個過程?節點產卵過程檢查timout
我已經催生了有時需要很長時間才能運行的過程,我的問題是有沒有辦法限制這個過程時間?例如3分鐘後殺死這個過程?節點產卵過程檢查timout
您可以在超時時間內使用process.kill
。但請記住,如果孩子在被解僱之前完成,則取消超時。
看看這個例子:
這是child.sh
是在3秒後返回:
#!/bin/bash
sleep 3
echo DATA FROM CHILD
這是一個節點計劃,派生那個孩子:
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秒鐘,這足以讓孩子完成。
可能的重複http://stackoverflow.com/questions/18694684/spawn-and-kill-a-process-in-node-js – abdulbarik