2016-09-21 87 views
2

我已經催生了有時需要很長時間才能運行的過程,我的問題是有沒有辦法限制這個過程時間?例如3分鐘後殺死這個過程?節點產卵過程檢查timout

+0

可能的重複http://stackoverflow.com/questions/18694684/spawn-and-kill-a-process-in-node-js – abdulbarik

回答

2

您可以在超時時間內使用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秒鐘,這足以讓孩子完成。