Ի՞նչ կլինի, եթե երեխայի գործընթացը ավարտվի։
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-ն և ավարտման վիճակը մնում են գործընթացների աղյուսակում, մինչև ծնողը «մաքրի» նրա վիճակը։