Bird
Raised Fist0
Node.jsframework~10 mins

Child process exit codes in Node.js - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Concept Flow - Child process exit codes
Start parent process
Spawn child process
Child runs task
Child finishes
Child sends exit code
Parent receives exit code
Parent handles exit code
End
The parent process starts a child process, which runs a task and then exits with a code. The parent receives this code and can act based on it.
Execution Sample
Node.js
const { spawn } = require('child_process');
const child = spawn('node', ['-e', 'process.exit(1)']);
child.on('exit', (code) => {
  console.log(`Child exited with code ${code}`);
});
This code spawns a child Node.js process that immediately exits with code 1, and the parent logs the exit code.
Execution Table
StepActionChild Process StateExit CodeParent Reaction
1Parent spawns child processRunningN/AWaiting for exit
2Child runs code: process.exit(1)Exiting1Receives exit event
3Parent receives exit eventExited1Logs: Child exited with code 1
4Parent finishes handlingExited1Process ends or continues
💡 Child process exits with code 1, parent receives and logs it.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3Final
childundefinedChild process object (running)Child process object (exiting)Child process object (exited)Child process object (exited)
codeundefinedundefined111
Key Moments - 2 Insights
Why does the exit code appear only after the child process finishes?
Because the exit code is sent when the child process ends, as shown in execution_table step 2 and 3 where the parent waits until the child exits to get the code.
Can the exit code be anything other than 0 or 1?
Yes, exit codes can be any integer between 0 and 255, where 0 means success and others indicate different errors or statuses, as the child sets it before exiting (step 2).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the child process state at step 2?
ARunning
BExited
CExiting
DNot started
💡 Hint
Check the 'Child Process State' column at step 2 in the execution_table.
At which step does the parent receive the exit code from the child?
AStep 1
BStep 3
CStep 2
DStep 4
💡 Hint
Look for when the parent logs the exit code in the execution_table.
If the child process exited with code 0 instead of 1, what would change in the execution_table?
AThe 'Exit Code' column would show 0 instead of 1
BThe 'Child Process State' would change to Running
CThe parent would not receive an exit event
DThe parent would spawn a new child process
💡 Hint
Focus on the 'Exit Code' column values in the execution_table.
Concept Snapshot
Child processes run separately from the parent.
They exit with a code (0 means success, others mean errors).
Parent listens for 'exit' event to get this code.
Use exit codes to know if child succeeded or failed.
Example: process.exit(1) exits with code 1.
Full Transcript
In Node.js, a parent process can create a child process to run tasks separately. The child process runs its code and then exits with a number called an exit code. Zero means success, any other number means some error or status. The parent listens for the child's exit event to get this code and can then decide what to do next. This flow helps the parent know if the child finished well or had problems.

Practice

(1/5)
1. What does an exit code of 0 from a Node.js child process usually mean?
easy
A. The process finished successfully without errors.
B. The process was terminated by a signal.
C. The process encountered an error and crashed.
D. The process is still running.

Solution

  1. Step 1: Understand exit codes in Node.js child processes

    Exit codes indicate how a process ended. Code 0 means success.
  2. Step 2: Interpret exit code 0

    Exit code 0 means the process finished without errors or interruptions.
  3. Final Answer:

    The process finished successfully without errors. -> Option A
  4. Quick Check:

    Exit code 0 = success [OK]
Hint: Exit code 0 always means success in child processes [OK]
Common Mistakes:
  • Confusing exit code 0 with error codes
  • Thinking signal termination returns 0
  • Assuming non-zero codes mean success
2. Which of the following is the correct way to listen for a child process exit event in Node.js?
easy
A. child.listen('exit', (code) => { /* handle exit */ });
B. child.exit(() => { /* handle exit */ });
C. child.onExit((code) => { /* handle exit */ });
D. child.on('exit', (code, signal) => { /* handle exit */ });

Solution

  1. Step 1: Recall Node.js child process event syntax

    Node.js child processes emit events listened with on method.
  2. Step 2: Confirm correct event and parameters

    The 'exit' event uses child.on('exit', (code, signal) => {}) syntax.
  3. Final Answer:

    child.on('exit', (code, signal) => { /* handle exit */ }); -> Option D
  4. Quick Check:

    Use child.on('exit', callback) [OK]
Hint: Use child.on('exit', callback) to catch exit events [OK]
Common Mistakes:
  • Using non-existent methods like exit() or onExit()
  • Using listen() instead of on()
  • Missing parameters in the callback
3. Consider this code snippet:
const { spawn } = require('child_process');
const child = spawn('node', ['-e', "process.exit(5)"]);
child.on('exit', (code, signal) => {
  console.log(`Exit code: ${code}, Signal: ${signal}`);
});

What will be printed when this code runs?
medium
A. Exit code: 0, Signal: null
B. Exit code: 5, Signal: null
C. Exit code: null, Signal: SIGTERM
D. Exit code: 1, Signal: null

Solution

  1. Step 1: Understand the child process exit code

    The child process runs process.exit(5), so it exits with code 5.
  2. Step 2: Check the exit event parameters

    The exit event callback receives code 5 and signal null because it exited normally with code 5.
  3. Final Answer:

    Exit code: 5, Signal: null -> Option B
  4. Quick Check:

    process.exit(5) sets exit code 5 [OK]
Hint: process.exit(n) sets exit code n, signal is null if normal exit [OK]
Common Mistakes:
  • Assuming exit code is always 0
  • Confusing signal with exit code
  • Expecting signal to be set on normal exit
4. You wrote this code to spawn a child process and listen for exit:
const { spawn } = require('child_process');
const child = spawn('node', ['-e', "setTimeout(() => process.exit(0), 1000)"]);
child.unref();
child.on('exit', (code) => {
  console.log(`Exited with code ${code}`);
});

But the console never logs anything. What is the likely problem?
medium
A. The exit event callback is missing the signal parameter.
B. The child process is not exiting because the event loop is blocked.
C. The child process exits after 1 second, but the main program ends before that.
D. The spawn command syntax is incorrect.

Solution

  1. Step 1: Analyze the child process behavior

    The child process exits after 1 second due to setTimeout.
  2. Step 2: Consider the main program lifecycle

    If the main program ends before 1 second, it may exit before child finishes, so no log appears.
  3. Final Answer:

    The child process exits after 1 second, but the main program ends before that. -> Option C
  4. Quick Check:

    Main program must stay alive to see child exit [OK]
Hint: Keep main program alive to catch delayed child exit events [OK]
Common Mistakes:
  • Thinking missing signal parameter breaks event
  • Assuming spawn syntax is wrong without error
  • Ignoring asynchronous timing of child exit
5. You want to run a child process and handle both normal exit and signal termination. Which code snippet correctly logs the exit code or signal received?
hard
A. child.on('exit', (code, signal) => { if (code !== null) console.log(`Exited with code ${code}`); else console.log(`Terminated by signal ${signal}`); });
B. child.on('exit', (code) => { if (code === 0) console.log('Success'); else console.log('Error'); });
C. child.on('close', (signal) => { console.log(`Closed with signal ${signal}`); });
D. child.on('exit', () => { console.log('Process ended'); });

Solution

  1. Step 1: Understand exit event parameters

    The 'exit' event provides two parameters: code (number or null) and signal (string or null).
  2. Step 2: Handle both exit code and signal

    If code is not null, process ended normally; if null, it was terminated by a signal.
  3. Step 3: Check code snippet correctness

    child.on('exit', (code, signal) => { if (code !== null) console.log(`Exited with code ${code}`); else console.log(`Terminated by signal ${signal}`); }); correctly checks code and signal and logs accordingly.
  4. Final Answer:

    child.on('exit', (code, signal) => { if (code !== null) console.log(`Exited with code ${code}`); else console.log(`Terminated by signal ${signal}`); }); -> Option A
  5. Quick Check:

    Check code !== null to distinguish exit vs signal [OK]
Hint: Check if exit code is null to detect signal termination [OK]
Common Mistakes:
  • Ignoring the signal parameter in exit event
  • Using 'close' event instead of 'exit' for exit codes
  • Not checking for null exit code before logging