Č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.