Sobes.tech
Middle

Mis juhtub, kui lapseprotsess lõpeb?

sobes.tech AI

Vastus AI-lt

Ema vanemprots saab sündmuse exit. Kui lapseprotsess lõpeb veaga, genereeritakse ka sündmus error ning edastatakse veateade. Lapseprotsessi standardväljundid (stdout, stderr) suletakse ning vanemprotsess peab neid sündmusi käsitlema, et vältida ressursside lekkimist (näiteks puhastades sündmuste kuulajaid).

Näide lõpetamise käsitlemisest:

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) => {
  // Käsitleda käivitamise või protsessi täitmise viga
  console.error('Alamprotsessi käivitamine ebaõnnestus.', err);
});

child.on('exit', (code, signal) => {
  // Käsitleda protsessi lõpp
  if (code !== 0) {
    console.warn(`Lapseprotsess lõpetas koodiga ${code} ja signaaliga ${signal}`);
  } else {
    console.log(`Lapseprotsess lõppes edukalt.`);
  }
});

Kui vanemprotsess ei kuula sündmust exit, jätkab ta oma täitmist. Kui lapseprotsess lõpeb veaga ning sündmust error ei käsitleta, tekib mittetöötav erand ning tõenäoliselt lõpetab vanemprotsess töö.

Samuti võivad tekkida zombiprotsessid, kui vanemprotsess ei käsitle sündmust exit ning operatsioonisüsteem ei saa õigesti puhastada lapseprotsessi ressursse. See juhtub, kui lapseprotsess on lõpetanud, kuid tema PID ja lõpetamise staatus jäävad protsesside tabelisse kuni selle ajani, kuni vanem "korjab" selle staatuse.