C++:停止 RPC 服务

Posted

技术标签:

【中文标题】C++:停止 RPC 服务【英文标题】:C++: stop RPC service 【发布时间】:2011-03-15 12:21:04 【问题描述】:

从我的 C++ 源代码开始,我正在启动一个调用 svc_run() 的 RPC 服务。一切看起来都很好,如果我在终端中输入rpcinfo -p,我可以看到我的服务正在运行。

现在我正在开发一个“清理”功能,它应该停止此服务并将其从rpcinfo -p 列表中删除。

我该怎么做?目前我只能在终端中使用sudo rpcinfo -d program version 来阻止它。如何从我的源文件中执行此操作?

谢谢。

【问题讨论】:

【参考方案1】:

一段时间后,我发现了如何做到这一点。其实我遇到了一些意想不到的困难。执行此操作的标准方法是使用:

svc_unregister(PROGID, VERSION)

但不知何故,它对我不起作用。经过大量试验和一些在线帮助 (http://www.spinics.net/lists/linux-nfs/msg05619.html) 我能够删除 RPC 服务调用:

pmap_unset(PROGID, VERSION);

希望这会有所帮助:)

【讨论】:

此调用“pmap_unset”通常在 svcudp_create f.x 之前的开头使用。它并没有为我停止 processQue【参考方案2】:

尝试使用void svc_exit(void)函数。更详细的描述请参考 rpc_svc_calls 章节。

【讨论】:

【参考方案3】:

我尝试了 svc_run() 的强制停止,但是没有找到解决方案,但是我让 svc_run() 从注册的函数中停止,然后它停止了 - 也许这可以帮助你 - 请看这个:@ 987654321@

【讨论】:

【参考方案4】:

“最好”的解决方案是结合使用 DevCpp 和 Danilo 的解决方案:

在服务器的 RPC 函数中,定义一个函数,当被客户端调用时,它会执行 svc_exit()。这将使您的 RPC 服务器从 svc_run() 循环返回。现在您可以扩展您的 RPC 客户端应用程序或创建一个单独的客户端应用程序来终止您的服务器。 在 RPC 服务器的主程序中,在调用 svc_run() 之后,立即执行“pmap_unset(PROGID, VERSION);”。这将使 rpcbind 取消注册您的 RPC 地址。 然后对您的应用程序进行常规清理。

这种组合允许您的 RPC 服务器作为恶魔运行,即无需用户交互,同时仍提供干净的退出而无需取消进程。

【讨论】:

以上是关于C++:停止 RPC 服务的主要内容,如果未能解决你的问题,请参考以下文章

微服务开源框架TARS的RPC源码解析 之 初识TARS C++服务端

XCode 9 停止调试和运行应用程序并给出错误“LLDB RPC 服务器已崩溃。”

RPC C++ 服务器端动态端点

刚学会 C++ 的小白用这个开源框架,做个 RPC 服务要多久?

是否有我可以用来在 C++ 中实现 RPC(客户端-服务器)的设计模式

在手动停止线程之前,JMeter 没有通过基于 TCP 协议的 JSON RPC 从服务器获得答案