How to spawn processes in Node.js

Spawning child processes enables Node.js applications to execute external commands and programs with real-time output streaming and better resource management than buffered alternatives. As the creator of CoreUI, a widely used open-source UI library, I’ve implemented process spawning in Node.js build tools throughout my 11 years of backend development. The most efficient approach is using the spawn method from the child_process module for commands that produce large outputs or run for extended periods. This method streams output as it becomes available, preventing memory issues with large data.

Use spawn from child_process module to execute commands with streaming output.

const { spawn } = require('child_process')

const listFiles = spawn('ls', ['-lah', '/usr'])

listFiles.stdout.on('data', (data) => {
  console.log(`Output: ${data}`)
})

listFiles.stderr.on('data', (data) => {
  console.error(`Error: ${data}`)
})

listFiles.on('close', (code) => {
  console.log(`Process exited with code ${code}`)
})

listFiles.on('error', (error) => {
  console.error(`Failed to start process: ${error.message}`)
})

Here spawn creates a child process running the ls command with arguments [’-lah’, ‘/usr’]. The stdout.on(‘data’) listener receives output chunks as they stream from the command, enabling real-time processing. The stderr.on(‘data’) listener captures error output separately. The close event fires when the process exits, providing the exit code. The error event handles cases where the process fails to start entirely, such as command not found errors.

Best Practice Note:

This is the approach we use in CoreUI build automation for executing Git commands and compilation tools. Use spawn for long-running processes or commands with large output, pass arguments as array elements to prevent command injection vulnerabilities, and always handle both stdout and stderr streams to prevent process blocking when buffers fill.


Speed up your responsive apps and websites with fully-featured, ready-to-use open-source admin panel templates—free to use and built for efficiency.


About the Author

Subscribe to our newsletter
Get early information about new products, product updates and blog posts.
How to Remove Underline from Link in CSS
How to Remove Underline from Link in CSS

How to validate an email address in JavaScript
How to validate an email address in JavaScript

How to Redirect to a New URL Using JavaScript Redirect Techniques
How to Redirect to a New URL Using JavaScript Redirect Techniques

How to get element ID in JavaScript
How to get element ID in JavaScript

Answers by CoreUI Core Team