1. 现象
-
在使用 rosrun 启动 ROS 节点的时候,默认情况下使用 ctrl+c 无法退出程序。
-
原因我也不太清楚,可能是 ROS 程序默认接管了所有信号量(ctrl+c就是一个信号量)
2. 解决
- 参考资料:官方文档-Initialization and Shutdown
- 自定义信号量处理的函数(代码来自上面的文档)
切换行号显示
#include <ros/ros.h>
#include <signal.h>
void mySigintHandler(int sig)
{
// Do some custom action.
// For example, publish a stop message to some other nodes.
// All the default sigint handler does is call shutdown()
ros::shutdown();
}
int main(int argc, char** argv)
{
ros::init(argc, argv, "my_node_name", ros::init_options::NoSigintHandler);
ros::NodeHandle nh;
// Override the default ros sigint handler.
// This must be set after the first NodeHandle is created.
signal(SIGINT, mySigintHandler);
//...
ros::spin();
return 0;
}