Sobes.tech
Middle

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.