带有集群的节点插件获取进程 ID returns 所有分叉进程的相同 ID
node addon with cluster get process id returns same id for all forked process's
编辑
GetCurrentProcessId() 和 getpid() return 不同的值...但 boost 没有。
原问题
我正在编写一个节点插件来添加一个本地本机缓存,以便在 运行 作为一个集群时与快速服务器一起使用,以拥有一个公共缓存。我在进程之间使用 boost message_queue
作为 IPC,并且需要唯一标识发送请求的进程。 Boost 提供 boost::interprocess::ipcdetail::get_current_process_id
来获取当前进程 ID,但是在主进程和子进程中 return 编辑了相同的进程 ID。我认为我说子进程也有自己唯一的 ID 是正确的。那么这里到底发生了什么:
回购(这是一个最小的可复制性):https://github.com/t348575/cluster-mem-shared
输出
00007FF95BDC2310
00007FF95BDC2310
00007FF95BDC2310
00007FF95BDC2310
示例js测试文件
require('dotenv').config();
const cluster = require('cluster');
const cache = new (require('./dist/index')).ClusterMemShared(process.env.MODE);
if (cluster.isMaster) {
cluster.fork();
cluster.fork();
cluster.fork();
}
我在 class 的构造函数中打印了这个,即 c++ returns 到 js
std::cout << bip::ipcdetail::get_current_process_id << std::endl;
正如我所说,这是一个未记录的实施细节。
但是,如果这确实是您的代码:
std::cout << bip::ipcdetail::get_current_process_id << std::endl;
那么明显的解决方法是调用函数而不是打印它的地址:
std::cout << bip::ipcdetail::get_current_process_id() << std::endl;
注意 operator()
编辑
GetCurrentProcessId() 和 getpid() return 不同的值...但 boost 没有。
原问题
我正在编写一个节点插件来添加一个本地本机缓存,以便在 运行 作为一个集群时与快速服务器一起使用,以拥有一个公共缓存。我在进程之间使用 boost message_queue
作为 IPC,并且需要唯一标识发送请求的进程。 Boost 提供 boost::interprocess::ipcdetail::get_current_process_id
来获取当前进程 ID,但是在主进程和子进程中 return 编辑了相同的进程 ID。我认为我说子进程也有自己唯一的 ID 是正确的。那么这里到底发生了什么:
回购(这是一个最小的可复制性):https://github.com/t348575/cluster-mem-shared
输出
00007FF95BDC2310
00007FF95BDC2310
00007FF95BDC2310
00007FF95BDC2310
示例js测试文件
require('dotenv').config();
const cluster = require('cluster');
const cache = new (require('./dist/index')).ClusterMemShared(process.env.MODE);
if (cluster.isMaster) {
cluster.fork();
cluster.fork();
cluster.fork();
}
我在 class 的构造函数中打印了这个,即 c++ returns 到 js
std::cout << bip::ipcdetail::get_current_process_id << std::endl;
正如我所说,这是一个未记录的实施细节。
但是,如果这确实是您的代码:
std::cout << bip::ipcdetail::get_current_process_id << std::endl;
那么明显的解决方法是调用函数而不是打印它的地址:
std::cout << bip::ipcdetail::get_current_process_id() << std::endl;
注意 operator()