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 supportedgidanduidare not supported- in node.js,
spawn()andexec()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 theenvoption to set up the child process environment. child.stdinhas nowrite()method (see example below for writing to child processstdin)
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
