Sobes.tech
Middle

Čo sa stane, ak sa proces dieťaťa ukončí?

sobes.tech AI

Odpoveď od AI

Proces rodiča dostane udalosť exit. Ak proces dieťaťa skončí s chybou, bude generovaná aj udalosť error a bude odovzdaný objekt chyby. Štandardné vstupné a výstupné toky procesu dieťaťa (stdout, stderr) budú zatvorené, a rodičovský proces musí tieto udalosti spracovať, aby predišiel únikom zdrojov (napríklad vyčistenie spracovateľov udalostí).

Príklad spracovania ukončenia:

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) => {
  // Spracovanie chyby pri spustení alebo vykonávaní procesu
  console.error('Nepodarilo sa spustiť podproces.', err);
});

child.on('exit', (code, signal) => {
  // Spracovanie ukončenia procesu
  if (code !== 0) {
    console.warn(`Dieťa proces ukončený s kódom ${code} a signálom ${signal}`);
  } else {
    console.log(`Dieťa proces úspešne ukončený.`);
  }
});

Ak rodičovský proces nepočúva na udalosť exit, bude pokračovať vo svojej činnosti. Ak dieťa proces skončí s chybou a udalosť error nie je spracovaná, dôjde k neobslúženému výnimke a pravdepodobne sa ukončí rodičovský proces.

Taktiež môžu vzniknúť zombie procesy, ak rodičovský proces neobsluhuje udalosť exit a operačný systém nemôže správne vyčistiť zdroje dieťaťa procesu. To sa stáva, keď dieťa proces skončí, ale jeho PID a stav ukončenia zostávajú v tabuľke procesov, kým rodičovský proces "zberie" jeho stav.