【问题标题】:Killing a node in ros在ros中杀死一个节点
【发布时间】:2022-04-27 09:07:51
【问题描述】:

在ROS中,节点列表如下

ros节点列表

在ROS中,杀死一个节点如下

rosnode 杀死 node_name

当我在特定节点上执行 kill 子命令时,节点列表正在正确更新并且该节点正在关闭。

但我不知道为什么一些进程在关机后没有在终端上终止,如下所示

我需要再次按 ctrl+cctrl+z 才能在终端上真正关闭它们。

为什么即使节点关闭,进程(在终端上)也没有终止?

【问题讨论】:

    标签: ubuntu-16.04 ros


    【解决方案1】:

    您看到的是该节点收到了关闭请求,但实际上并未停止,而是试图停止。

    rosnode kill something 所做的是将 SIGINT 发送到 NodeHandle,而节点应该做的是解构其类并释放 NodeHandle(使用正确编写的代码)

    我认为在您的特定节点中发生了什么,要么更改了 SIGINT 处理程序,要么您的 NodeHandle 无法销毁与您的 roscpp Lib 链接的所有对象,并且需要您按 CTRL+C 以允许升级到更激进的终止

    在不看代码的情况下,我能做的就是帮助你:

    • 确保您使用的每个类都有一个析构函数
    • 确保释放代码中的所有硬件连接(串行连接、摄像头连接等)
    • 确保您重新分配内存的每个指针和引用(不是必需的,但比抱歉更安全)

    如果您仍然遇到问题,请尝试重写 SIGINT 信号,这是指向 ROS-Wiki 的链接,其中包含有关您的问题的详细信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-19
      • 1970-01-01
      • 2020-09-11
      • 2016-01-27
      • 1970-01-01
      • 2020-10-27
      相关资源
      最近更新 更多