Ich starte einen Spawn-Child-Prozess folgendermaßen:
let process = spawn(apiPath, {
detached: true
})
process.unref()
process.stdout.on('data', data => { /* do something */ })
Wenn ich den Prozess starte, muss ich ihn angehängt halten, da ich seine Ausgabe lesen möchte. Aber kurz bevor ich meinen Knotenprozess (den übergeordneten Prozess) schließe, möchte ich alle nicht abgeschlossenen untergeordneten Prozesse trennen, damit sie im Hintergrund ausgeführt werden. In der Dokumentation heißt es jedoch:
Wenn Sie die getrennte Option verwenden, um einen Prozess mit langer Laufzeit zu starten, bleibt der Prozess nach dem Beenden des übergeordneten Elements nicht im Hintergrund ausgeführt, es sei denn, er verfügt über eine Standardkonfiguration, die nicht mit dem übergeordneten Prozess verbunden ist.
Aber mit der Option stdio: 'ignore'
kann ich nicht lesen, stdout
was ein Problem ist.
Ich habe zuvor versucht, die Pipes manuell zu schließen, um den übergeordneten Prozess zu schließen, aber es ist nicht erfolgreich:
// Trigger just before the main process end
process.stdin.end()
process.stderr.unpipe()
process.stdout.unpipe()