O que acontecerá se o processo filho terminar?
sobes.tech IA
Resposta da IA
O processo pai receberá o evento exit. Se o processo filho terminar com um erro, também será gerado um evento error e será passado um objeto de erro. Os fluxos padrão de entrada e saída do processo filho (stdout, stderr) serão fechados, e o processo pai deve tratar esses eventos para evitar vazamentos de recursos (por exemplo, limpar os manipuladores de eventos).
Exemplo de tratamento de finalização:
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) => {
// Tratamento de erro ao iniciar ou executar o processo
console.error('Falha ao iniciar o subprocesso.', err);
});
child.on('exit', (code, signal) => {
// Tratamento do encerramento do processo
if (code !== 0) {
console.warn(`O processo filho saiu com código ${code} e sinal ${signal}`);
} else {
console.log(`O processo filho saiu com sucesso.`);
}
});
Se o processo pai não escuta o evento exit, ele continuará sua execução. Se o processo filho terminar com um erro e o evento error não for tratado, ocorrerá uma exceção não tratada e, provavelmente, o processo pai terminará.
Também podem ocorrer processos zumbis se o processo pai não tratar o evento exit e o sistema operacional não puder limpar corretamente os recursos do processo filho. Isso acontece quando o processo filho termina, mas seu PID e status de término permanecem na tabela de processos até que o pai "recolha" seu status.