在命令窗口中按下ctrl+c后 程序虽然停止运行,但不能退出到命令行状态,必须强制退出才可以。 添加了signal(SIGINT, MySigintHandler);但不能自动调用

问题描述:
在命令窗口中按下ctrl+c后 程序虽然停止运行,但不能退出到命令行状态,必须强制退出才可以。 添加了signal(SIGINT, MySigintHandler);但不能自动调用
解决办法:
signal(SIGINT, MySigintHandler);添加的位置不正确。调整在程序中的位置如下所示:放到ros::Rate 和 ros::NodeHandle nh; 语句后面就可以了。

int main(int argc, char** argv)
{
    ros::init(argc, argv, "test");
    ros::AsyncSpinner spinner(4);
    ros::NodeHandle nh;
    ros::Rate rate(30);
    spinner.start();

    signal(SIGINT, MySigintHandler);
    //覆盖原来的Ctrl+C中断函数,原来的只会调用ros::shutdown(),按下了Ctrl+C,则会调用MySigintHandler
    //为你关闭节点相关的subscriptions, publications, service calls, and service servers,退出进程
    
    while(ros::ok)
    {
        //code
    }
    
    return 0;
}

MySigintHandler代码如下:

void MySigintHandler(int sig)
{
    //这里主要进行退出前的数据保存、内存清理、告知其他节点等工作
    ROS_INFO("shutting down!");
    ros::shutdown();
    exit(0);
}

参考:
https://www.cnblogs.com/HaoQChen/p/11048616.html

原文链接:https://blog.csdn.net/ABC_ORANGE/article/details/105096782

官网资料:官方文档-Initialization and Shutdown

一定要加头文件:#include <signal.h>

### 回答1: 如果你想停止退出正在运行的 Python 后台任务,可以使用 `Ctrl + C` 组合键来程序的执行。这会发送一个断信号给程序,使其停止运行。如果你希望在程序执行完当前的任务后再停止程序,可以在程序添加一个退出信号的处理函数。例如,你可以使用 `signal` 模块来注册一个信号处理函数,当程序接收到指定的信号时,执行该函数来停止程序运行。 ### 回答2: 当确认需要停止退出正在运行的Python后台任务时,我们可以执行以下步骤: 1. 打开命令行或终端窗口,并定位到正在运行后台任务的目录或环境。 2. 查找正在运行的Python进程的PID(进程ID)。我们可以使用如下命令:`ps -ef | grep python`。 3. 根据步骤2获得的PID,可以使用`kill`命令停止该进程。例如,`kill <PID>`或`kill -9 <PID>`。 4. 在停止进程后,我们可以通过输入`exit`或`quit()`命令退出Python环境。 请注意,上述步骤可能因操作系统或具体情况而有所不同。在执行前,请确保你确实需要停止退出正在运行的Python后台任务,以免造成数据丢失或其他不可逆的影响。 ### 回答3: 如果要停止退出正在运行的Python后台任务,可以采取以下步骤: 1. 找到运行该任务的终端或命令行窗口。如果是在操作系统的后台进程运行,可以尝试使用任务管理器或类似工具来找到该任务的进程。 2. 可以尝试按下"Ctrl + C"组合键来发送断信号给任务。在大多数情况下,这会断正在运行的任务并退出。 3. 如果按下"Ctrl + C"没有效果,可以尝试使用"Ctrl + \ "组合键,这会发送退出信号给任务,并在一些情况下会强制终止任务。 4. 如果以上方法都不起作用,可以使用操作系统的任务管理器或类似工具来终止或结束该任务的进程。 需要注意的是,上述方法可能会因为操作系统、终端应用程序或其他因素而有所差异。在执行上述操作时,请确保你有足够的权限来停止退出程序,以免产生任何意外后果。另外,如果任务运行在服务器或远程计算机上,你可能需要远程连接到该计算机才能执行上述操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值