杀死ros中的节点

问题描述 投票:0回答:1

在ROS中,节点列表如下

ros节点列表

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

rosnode杀死node_name

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

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

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

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

ubuntu-16.04 ros
1个回答
0
投票

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

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

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

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

  • 确保您使用的每个类都有一个析构函数
  • 确保释放代码中的每个硬件连接(串行连接、相机连接等)
  • 确保释放每个指针和对内存的引用(不是必需的,但安全总比抱歉好)

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

© www.soinside.com 2019 - 2024. All rights reserved.