mirror of
https://github.com/oven-sh/bun
synced 2026-02-10 10:58:56 +00:00
58 lines
1.6 KiB
JavaScript
58 lines
1.6 KiB
JavaScript
const { spawn } = require("child_process");
|
|
const path = require("path");
|
|
const net = require("net");
|
|
|
|
if (process.argv[2] === "child") {
|
|
// Send initial message to parent
|
|
process.send({ status: "Child process started" });
|
|
} else {
|
|
// Spawn child process with IPC enabled
|
|
const child = spawn(process.execPath, [process.argv[1], "child"], {
|
|
stdio: ["inherit", "inherit", "inherit", "ipc"],
|
|
});
|
|
|
|
// Listen for messages from child
|
|
child.on("message", message => {
|
|
console.log("Parent received:", JSON.stringify(message));
|
|
});
|
|
|
|
// Handle child process exit
|
|
child.on("exit", code => {
|
|
console.log(`Child process exited with code ${code}`);
|
|
try {
|
|
console.log("send returned", child.send({ msg: "uh oh" }));
|
|
} catch (ex) {
|
|
console.log("[1]caught", ex.code);
|
|
}
|
|
try {
|
|
child.send({ msg: "uh oh!" }, a => {
|
|
console.log("cb", a.code);
|
|
});
|
|
} catch (ex) {
|
|
console.log("[2]caught", ex.code);
|
|
}
|
|
});
|
|
process.on("uncaughtException", err => {
|
|
console.log("uncaughtException", err.code);
|
|
});
|
|
|
|
// Send initial message to child
|
|
|
|
// support:
|
|
// net.Socket, net.Server, net.Native, dgram.Socket, dgram.Native
|
|
// sends message {cmd: NODE_HANDLE, type: }
|
|
|
|
const server = net.createServer();
|
|
|
|
child.send({ greeting: "Hello child process!" }, server);
|
|
|
|
// Listen for messages from parent
|
|
process.on("message", message => {
|
|
console.log("Child received:", JSON.stringify(message));
|
|
|
|
// Send a message back to parent
|
|
process.send({ message: "Hello from child!" });
|
|
process.channel.unref();
|
|
});
|
|
}
|