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 supportedgid
anduid
are 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 theenv
option to set up the child process environment. child.stdin
has 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
Document Tags and Contributors
Last updated by:
wbamberg,