2017-10-25 2 views
0

Ich habe eine Knoten-App, die mit child_process eine sehr große Datei erstellt. Trotz der Einstellung der relevanten Optionen (oder so dachte ich, es scheint nur mit Grund 'Null' sofort zu beenden. Wenn ich den Befehl manuell ausführen, ist es in Ordnung. (Der JS/Event-Thread läuft weiter, also ist es nicht. '. ..‘ist geschwärzt URL)child_process wird beendet, wenn es nicht sollte

const spawn = require('child_process').spawn; 
var options = {stdio: 'ignore', detatched: true}; 

var ls = spawn('wget', ['http://...', '-O', './file.sav'], options); 
console.log("PID is ", ls.pid); 
ls.unref(); 
+0

Es sieht so aus, als ob Sie das 'wget' starten und dann den Node-Prozess (aber nicht den' wget'-Prozess) beenden möchten ("Hintergrund" des "wget"). Ist das deine Absicht? Sie haben sich auch vertippt _ "detached" _. – robertklep

+0

Habe jetzt die Rechtschreibung korrigiert! Ja, das stimmt genau. Was im Knoten passiert, ist weitgehend irrelevant, da ich den Prozess später über die PID bearbeite. – user4893295

+0

Aber es lässt immer noch nicht den Prozess laufen, trotz Korrektur der Schreibweise @robertklep – user4893295

Antwort

0

es Figured am Ende heraus. ich war PM2 (Prozess-Manager) im Watch-Modus ausgeführt wird. Dadurch wird die Node App jedes Mal wget wurde neu gestartet, um die Festplatte zu schreiben begonnen!

Es ist interessant, dass dies zu Beginn des Schreibens auf die Festplatte geschah, anstatt darauf zu warten, dass wget das Schreiben der Datei beendet. Auch dass es so schnell war, dass der Code den Prozess nicht reaktivierte, geschah dies nicht Zeit, um den Prozess vor dem Ende zu speichern mit der Knoten-App.

Bekam das Problem durch Ausschließen der Verzeichnisse, in die in der Config von PM2 geschrieben werden.

Verwandte Themen