2016-09-21 3 views
2

Я породил процесс, который иногда занимает много времени, мой вопрос заключается в возможности ограничить это время процесса? например, убить этот процесс через 3 мин?Узел проверки процесса вскрытия для таймаута

+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 секунд, которого достаточно для завершения ребенка.