Mi történik, ha a gyermekfolyamat befejeződik?
sobes.tech MI
Válasz az MI-től
A szülő folyamat megkapja az exit eseményt. Ha a gyermek folyamat hibával ér véget, akkor egy error esemény is generálódik, és egy hibátárgyat ad át. A gyermek folyamat standard bemeneti és kimeneti folyamatai (stdout, stderr) bezáródnak, és a szülő folyamatnak kezelnie kell ezeket az eseményeket, hogy elkerülje az erőforrás szivárgásokat (például eseménykezelők tisztítása).
A befejezés kezelési példája:
const { spawn } = require('child_process');
const child = spawn('ls', ['-lh', '/usr']);
child.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});
child.stderr.on('data', (data) => {
console.error(`stderr: ${data}`);
});
child.on('error', (err) => {
// Hiba kezelése a folyamat indításakor vagy végrehajtásakor
console.error('Alfolyamat indítása nem sikerült.', err);
});
child.on('exit', (code, signal) => {
// A folyamat befejezésének kezelése
if (code !== 0) {
console.warn(`Gyermek folyamat kilépett kóddal ${code} és jellel ${signal}`);
} else {
console.log(`Gyermek folyamat sikeresen befejeződött.`);
}
});
Ha a szülő folyamat nem hallgat az exit eseményre, akkor folytatja a végrehajtását. Ha a gyermek folyamat hibával ér véget, és az error esemény nincs kezelve, akkor kezeletlen kivétel fordul elő, és valószínűleg a szülő folyamat is leáll.
Emellett zombifolyamatok is kialakulhatnak, ha a szülő nem kezeli az exit eseményt, és az operációs rendszer nem tudja helyesen megtisztítani a gyermek folyamat erőforrásait. Ez akkor fordul elő, amikor a gyermek folyamat befejeződik, de a PID-je és a befejezési státusza a folyamat táblában marad, amíg a szülő "összegyűjti" a státuszt.