【发布时间】:2018-06-02 02:02:27
【问题描述】:
我想通过终端优雅地杀死 rosbag 实例。
优雅地意味着在这种情况下,rosbag 文件在 kill 之后没有后缀 .active。
所以我从终端执行以下操作,将推荐的SIGINT 发送到 rosbag:
$ rosbag record /some/topic &
$ RPID=$!
$ # do some stuff
$ kill -2 $RPID
不幸的是,该包仍然处于活动状态,并且可能并非所有内容都存储到磁盘中。 但是,如果我将 rosbag 放入启动文件中,它似乎可以工作:
$ roslaunch rosbag_record.launch &
$ LPID=$!
$ # do some stuff
$ kill -2 $LPID
现在 rosbag 保持完整,并且在没有 active 后缀的情况下被存储。
现在有趣的问题是,在第一种情况下我做错了什么。
我虽然杀死一个启动文件,在这种情况下杀死 roscore,会引发一个ros::shutdown(),这会在所有进程中导致一个SIGINT。
但是使用kill 的手动方式似乎有不同的行为。
【问题讨论】:
-
此问题在ROS Answers 上有多个重复项。您可以在脚本中使用rosnode kill 或take care of killing child processes。
-
哦,太好了!您会建议关闭我的问题,还是应该将其留作参考?
-
我认为保留作为参考可能很有用,因为似乎有很多人不知道 ROS Answers。您可以自己写一个简短的答案,最后通过相关 ROS Answers 问题的链接解释您是如何修复它的。