mirror of
https://github.com/denoland/deno.git
synced 2024-12-27 01:29:14 -05:00
5a91a065b8
This PR implements the Node child_process IPC functionality in Deno on Unix systems. For `fd > 2` a duplex unix pipe is set up between the parent and child processes. Currently implements data passing via the channel in the JSON serialization format.
52 lines
1.3 KiB
JavaScript
52 lines
1.3 KiB
JavaScript
// deno-fmt-ignore-file
|
|
// deno-lint-ignore-file
|
|
|
|
// Copyright Joyent and Node contributors. All rights reserved. MIT license.
|
|
// Taken from Node 18.12.1
|
|
// This file is automatically generated by `tools/node_compat/setup.ts`. Do not modify this file manually.
|
|
|
|
'use strict';
|
|
|
|
// Ignore on Windows.
|
|
if (process.platform === 'win32') {
|
|
process.exit(0);
|
|
}
|
|
|
|
const common = require('../common');
|
|
const assert = require('assert');
|
|
const cp = require('child_process');
|
|
const NUM_MESSAGES = 10;
|
|
const values = [];
|
|
|
|
for (let i = 0; i < NUM_MESSAGES; ++i) {
|
|
values[i] = i;
|
|
}
|
|
|
|
if (process.argv[2] === 'child') {
|
|
const received = values.map(() => { return false; });
|
|
|
|
process.on('uncaughtException', common.mustCall((err) => {
|
|
received[err] = true;
|
|
const done = received.every((element) => { return element === true; });
|
|
|
|
if (done)
|
|
process.disconnect();
|
|
}, NUM_MESSAGES));
|
|
|
|
process.on('message', (msg) => {
|
|
// If messages are handled synchronously, throwing should break the IPC
|
|
// message processing.
|
|
throw msg;
|
|
});
|
|
|
|
process.send('ready');
|
|
} else {
|
|
const child = cp.fork(__filename, ['child']);
|
|
|
|
child.on('message', common.mustCall((msg) => {
|
|
assert.strictEqual(msg, 'ready');
|
|
values.forEach((value) => {
|
|
child.send(value);
|
|
});
|
|
}));
|
|
}
|