Sobes.tech
Middle

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.