为啥我的 fork 子进程在我 fork 后立即退出?
Posted
技术标签:
【中文标题】为啥我的 fork 子进程在我 fork 后立即退出?【英文标题】:Why does my forked child process exit immediately after I fork it?为什么我的 fork 子进程在我 fork 后立即退出? 【发布时间】:2017-04-20 02:51:37 【问题描述】:我只是想派生一个简单的子进程并让 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');
);
我立即将“退出”打印到控制台,但从未收到“嗨”。然后,如果我继续尝试发送到子进程,则会收到通道关闭错误。
我做错了什么?
【问题讨论】:
我认为这是因为您的子进程正在完成。子进程中的某些东西需要保持进程运行。 我尝试向它添加垃圾setInterval()
以使其保持活力,但仍然没有骰子
试试process.stdin.resume();
在 child.js 中?我刚试了,还是不行:(
您是否将setInterval()
放入处理程序中?如果我把它放在child.js
的处理程序之外,我可以让进程保持活动状态,但消息发送仍然无法正常工作。
【参考方案1】:
您需要保持两个进程都打开,因为子进程会立即关闭,父进程也会立即关闭。你可以这样做:
父.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');
);
【讨论】:
另外,我不确定任意事件名称是否有效。好像一定是“消息” ohhhhh 我搞定了 :) 原来是事件名称 - 以为它可以是任何东西,但就像你说的那样它必须是“消息”以上是关于为啥我的 fork 子进程在我 fork 后立即退出?的主要内容,如果未能解决你的问题,请参考以下文章