我们可以通过
rosnode kill /node_name
杀死特定的ros节点
但是前提是必须知道节点名
终端的话可以通过tab直接补全出完整的节点名
【提出问题】如果是在代码中如何通过固定终端命令来杀死不固定名称的特定节点呢?
【场景举例】rosbag的节点名称通常不是固定的,现在我们要通过python程序终止录制bag,这就要求我们杀死bag录制进程。如果是使用kill会生成bag.active文件,在ros节点管理中并没有杀死。因此我们需要知道他的节点名,并通过rosnode kill来杀死。
【解决】
os.system("rosnode kill $(rosnode list) | grep record")
【代码解释】
通过os.system函数来调用终端命令
rosnode list
用来遍历所有rosnode
rosnode list | grep record
用管道来检索带有record字符的rosnode
最终即可实现杀死rosbag record进程的问题 |