Mozilla's getting a new look. What do you think?



An implementation of the node.js child_process API.

This module enables you to execute a child program in a new process. Since it emulates the node.js child_process API, it's not documented separately here. However, there are a few differences to be aware of:

  • you need to require() the module using require("sdk/system/child_process")
  • fork() is not supported
  • gid and uid are not supported
  • in node.js, spawn() and exec() inherit the environment variables from the parent process, by default. The SDK versions don't: so when you specify a command you must pass in a complete path to the command or use the env option to set up the child process environment.
  • child.stdin has no write() method (see example below for writing to child process stdin)


Adaption of node's documentation for spawn():

var child_process = require("sdk/system/child_process");

var ls = child_process.spawn('/bin/ls', ['-lh', '/usr']);

ls.stdout.on('data', function (data) {
  console.log('stdout: ' + data);

ls.stderr.on('data', function (data) {
  console.log('stderr: ' + data);

ls.on('close', function (code) {
  console.log('child process exited with code ' + code);

Writing to child process' stdin

Because the SDK implementation does not include a write() method for child processes, you must use the "raw" emit event.

const { emit } = require('sdk/event/core');
const { spawn } = require('sdk/system/child_process');

var proc = spawn("/bin/cat");

emit(proc.stdin, 'data', "Hello from Add-on code");
emit(proc.stdin, 'end');

Using child_process in non-jpm extensions

// Import SDK Stuff
const COMMONJS_URI = 'resource://gre/modules/commonjs';
const { require } = Cu.import(COMMONJS_URI + '/toolkit/require.js', {});
var child_process = require('sdk/system/child_process');

// Use it in the same way as in the example above


Document Tags and Contributors

 Contributors to this page: wbamberg, groovecoder, Noitidart
 Last updated by: wbamberg,