Sobes.tech
Middle

Ի՞նչ կլինի, եթե երեխայի գործընթացը ավարտվի։

sobes.tech AI

Պատասխան AI-ից

Ծնող գործընթացը կստանա exit իրադարձությունը։ Եթե երեխա գործընթացը ավարտվի սխալով, նաև կստեղծվի error իրադարձությունը և փոխանցվի սխալի օբյեկտը։ Երեխա գործընթացի ստանդարտ մուտքագրման և ելքային հոսքերը (stdout, stderr) կփակվեն, և ծնող գործընթացը պետք է կառավարի այս իրադարձությունները՝ ռեսուրսների արտահոսքը կանխելու համար (օրինակ՝ իրադարձությունների հսկիչների մաքառում)։

Ավարտի մշակման օրինակ՝

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) => {
  // Սխալի մշակումը գործընթացի մեկնարկի կամ կատարման ժամանակ
  console.error('Չհաջողվեց մեկնարկել ենթա գործընթացը.', err);
});

child.on('exit', (code, signal) => {
  // Գործընթացի ավարտի մշակումը
  if (code !== 0) {
    console.warn(`Երեխա գործընթացը ավարտվեց կոդով ${code} և նշանով ${signal}`);
  } else {
    console.log(`Երեխա գործընթացը հաջողությամբ ավարտվեց։`);
  }
});

Եթե ծնող գործընթացը չի լսում exit իրադարձությունը, այն կշարունակի իր աշխատանքը։ Եթե երեխա գործընթացը ավարտվի սխալով և error իրադարձությունը չի մշակվում, տեղի կունենա անտիրական արտահայտություն և, հավանաբար, ծնող գործընթացը կավարտվի։

Նույնպես, կարող են առաջանալ Զոմբի գործընթացներ, եթե ծնող գործընթացը չի մշակել exit իրադարձությունը և օպերացիոն համակարգը չի կարող ճիշտ մաքրել երեխա գործընթացի ռեսուրսները։ Դա տեղի է ունենում, երբ երեխա գործընթացը ավարտվում է, բայց նրա PID-ն և ավարտման վիճակը մնում են գործընթացների աղյուսակում, մինչև ծնողը «մաքրի» նրա վիճակը։