Join MDN and developers like you at Mozilla's View Source conference, 12-14 September in Berlin, Germany. Learn more at https://viewsourceconf.org

system/child_process

Experimental

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)

Examples

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,