使用kill,杀死ros进程,并捕捉signal

本文介绍如何在ROS环境中通过ps和grep命令查找特定ROS节点的进程号,并使用sudo kill命令结合不同信号参数优雅地终止进程。-2信号允许进程正常响应终止,而-9则强制结束,不可被进程捕获。

1.查看ROSnode的进程号:

 ps -ef | grep ros

得到进程号:

   用户名     21369 56123  4 15:48 pts/18   00:00:00 /usr/bin/python /opt/ros/kinetic/bin/roslaunch my_service my.launch

21369即是我们要找的进程号

2. 杀死该进程

sudo kill -2 21369

使用-2命令杀死的进程,-2杀死进程相当于键盘打断ctrl+c,可以通过signal的SIGINT捕捉到,从而进行获得进程终止信号后的一系列操作。其中-9是不可被捕获的信号,见下图。
在这里插入图片描述

参考文章:https://www.jianshu.com/p/ca49494e1f3d

ROS 2中,杀死一个节点的过程可以通过多种方式进行操作。以下是几种常见的方法: 1. **直接终止程序** 如果你是通过运行Python或C++等脚本启动了一个ROS 2节点,可以直接关闭该终端窗口,或者按下 `Ctrl+C` 来终止进程。 2. **使用命令行工具 (`ros2 node kill`)** ROS 2 提供了专门的命令用于停止特定节点: ```bash ros2 node kill <node_name> ``` 其中 `<node_name>` 是你要杀死的目标节点名称。注意这个功能依赖于正确的命名匹配,且需要你的系统能够识别连接到目标节点所在的上下文环境(如同一个域下的网络配置)。 3. **编程控制** - 在编写代码的时候可以设计条件使得某些事件触发时主动退出循环逻辑结构体内部的核心业务部分比如定时检查状态标志位一旦发现异常则立即返回函数结束当前任务流从而间接导致整个实例化对象生命周期完结达到销毁的效果。 例如,在 Python 节点里你可以这样做: ```python import rclpy def main(args=None): rclpy.init(args=args) node = rclpy.create_node('my_node') # Your logic here... if some_condition_to_exit(): node.destroy_node() # Destroy the node explicitly. rclpy.shutdown() # Shutdown the ROS client library. if __name__ == '__main__': main() ``` 4. **发送信号给指定PID (Process ID)** 如果你知道某个具体后台进程中正在运作着对应的那个服务单元编号的话也可以采用强制手段清除它出去即利用 Linux 系统提供的基础指令集完成类似动作如下所示例子所示那样去做就成啦! ```bash kill $(pgrep -f my_ros2_node.py) ``` 这里假设我们的 python 文件名为 "my_ros2_node.py" ,此命令将查找所有包含其字符串形式表示的活动线程然后逐一处理掉它们直至完全消除为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值