Proces potomny spawn rozpoczynam w ten sposób:
let process = spawn(apiPath, {
detached: true
})
process.unref()
process.stdout.on('data', data => { /* do something */ })
Kiedy zaczynam proces, muszę go trzymać, ponieważ chcę odczytać jego dane wyjściowe. Ale tuż przed zamknięciem procesu Node (rodzic) chcę odłączyć wszystkie nieukończone procesy potomne, aby działały w tle, ale jak mówi dokumentacja :
Podczas korzystania z opcji odłączonej w celu uruchomienia długotrwałego procesu, proces nie będzie działał w tle po wyjściu z rodzica, chyba że zostanie wyposażony w konfigurację stdio, która nie jest połączona z rodzicem.
Ale z opcją stdio: 'ignore'
nie mogę odczytać, stdout
który jest problemem.
Próbowałem ręcznie zamknąć potoki przed zamknięciem procesu nadrzędnego, ale nie powiodło się:
// Trigger just before the main process end
process.stdin.end()
process.stderr.unpipe()
process.stdout.unpipe()