Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 为什么我的分叉子进程在分叉后立即退出?_Node.js_Electron - Fatal编程技术网

Node.js 为什么我的分叉子进程在分叉后立即退出?

Node.js 为什么我的分叉子进程在分叉后立即退出?,node.js,electron,Node.js,Electron,我只是尝试派生一个简单的子进程,让IPC通道保持打开状态,但由于某些原因,它会立即退出 在parent.js中: var child = require('child_process').fork('./child.js'); child.on('hi', function() { console.log("Hi"); }); child.on('exit', function() { console.log("Exited"); }); child.send('hello'

我只是尝试派生一个简单的子进程,让IPC通道保持打开状态,但由于某些原因,它会立即退出

在parent.js中:

var child = require('child_process').fork('./child.js');
child.on('hi', function() {
    console.log("Hi");
});

child.on('exit', function() {
    console.log("Exited");
});

child.send('hello');
在child.js中:

process.on('hello', function() {
    process.send('hi');
});
我立即将“退出”打印到控制台,但从未收到“嗨”。然后,如果我继续尝试发送到子进程,我会得到一个通道关闭错误


我做错了什么?

您需要保持两个进程都处于打开状态,因为子进程会立即关闭,父进程也会立即关闭。您可以这样做:

parent.js

var child = require('child_process').fork('./child.js');

child.on('message', function () {
  console.log("Hi");
});

child.on('exit', function () {
  console.log("Exited");
});

setTimeout(() => {
  child.send('hello');
}, 1000);


process.stdin.resume();
child.js

process.on('message', function () {
  console.log("sending hi");
  process.send('hi');
});

我认为这是因为你的孩子的过程正在结束。子进程中的某些内容需要保持进程运行。我尝试向其添加垃圾
setInterval()
,以使其保持活动状态,但仍然没有dicetry
process.stdin.resume()在child.js中?我只是试了一下,还是什么都没做:(你把
setInterval()
放在处理程序中了吗?如果我把它放在
child.js
处理程序之外,我可以让进程保持活动状态,但是消息发送仍然不起作用。另外,我不确定任意事件名称是否起作用。看起来它一定是“message”哦,我让它起作用了:)原来是活动名称-我想它可以是任何东西,但就像你说的,它必须是“消息”