2016-09-21 8 views
2

Ich habe Prozess erzeugt, die manchmal zu lange dauern, meine Frage ist, gibt es eine Möglichkeit, diese Prozesszeit zu begrenzen? zum Beispiel töten Sie diesen Prozess nach 3 min?Node Spawn Prozess Check für Timout

+0

Mögliches Duplikat http://stackoverflow.com/questions/18694684/spawn-and-kill-a-process-in-node-js – abdulbarik

Antwort

2

Sie können process.kill in einem Timeout verwenden. Denken Sie jedoch daran, das Zeitlimit abzubrechen, wenn das Kind fertig ist, bevor es ausgelöst wird.

bei diesem Beispiel Werfen Sie einen Blick:

Diese child.sh ist, die nach 3 Sekunden zurück:

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

Dies ist ein Node-Programm, das das Kind laicht:

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())); 

standardmäßig Es wartet 2 Sekunden, was kürzer ist als das Kind benötigt und das Kind wird getötet, aber Sie können eine andere Anzahl von Sekunden als Kommandozeilenargument hinzufügen:

auf 10 Sekunden warten, damit das Kind fertig ist.

Verwandte Themen