Please note, this is a STATIC archive of website developer.mozilla.org from 03 Nov 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

Revision 992939 of system/child_process

  • Revision slug: Mozilla/Add-ons/SDK/Low-Level_APIs/system_child_process
  • Revision title: system/child_process
  • Revision id: 992939
  • Created:
  • Creator: wbamberg
  • Is current revision? Yes
  • Comment

Revision Content

{{AddonSidebar}}

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

 

Revision Source

{{AddonSidebar}}

<div class="note">
<p>Experimental</p>
</div>

<p><span class="seoSummary">An implementation of the <a href="https://nodejs.org/api/child_process.html">node.js <code>child_process</code> API</a>.</span></p>

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

<ul>
 <li>you need to require() the module using <code>require("sdk/system/child_process")</code></li>
 <li><code>fork()</code> is not supported</li>
 <li><code>gid</code> and <code>uid</code> are not supported</li>
 <li>in node.js, <code>spawn()</code> and <code>exec()</code> 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 <code>env</code> option to set up the child process environment.</li>
 <li><code>child.stdin</code> has no <code>write()</code> method (see example below for writing to child process <code>stdin</code>)</li>
</ul>

<h2 id="Examples">Examples</h2>

<h3 id="Adaption_of_node's_documentation_for_spawn()">Adaption of node's documentation for <a href="https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options"><code>spawn()</code></a>:</h3>

<pre class="brush: js">
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);
});</pre>

<h3 id="Writing_to_child_process'_stdin">Writing to child process' <code>stdin</code></h3>

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

<pre class="brush: js">
<code>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');
</code></pre>

<h3 id="Using_child_process_in_non-jpm_extensions">Using child_process in non-jpm extensions</h3>

<pre>
<code>// 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</code></pre>

<p>&nbsp;</p>
Revert to this revision