コマンド ウィンドウで Ctrl+C を押すと、プログラムの実行は停止しますが、終了してコマンド ライン状態に戻ることはできないため、強制的に終了する必要があります。シグナル(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

公式 Web サイト情報:公式ドキュメント - 初期化とシャットダウン

必ずヘッダー ファイル #include <signal.h> を追加してください。

おすすめ

転載: blog.csdn.net/jianlai_/article/details/128105892