c/c++语言开发共享XCode优雅的程序关闭

我正在使用xcode中的类似服务器的程序,我希望它在调试运行之间正常关闭。 基本上以下行不起作用

std::signal(SIGKILL, [](int){ printf("got sigkill here!n"); //shut-down code here }); 

我试过捕获其他信号,但到目前为止SIGINT,SIGTERM和SIGABRT都没有用。 如果打印,xcode如何终止该程序

程序以退出代码结束:9

到控制台?

编辑显然SIGKILL无法被捕获,请参阅此维基百科条目。

与SIGTERM和SIGINT相反,此信号无法捕获或忽略,接收过程无法在接收到此信号后执行任何清理

    你无法抓住SIGKILL 。 当进程收到SIGKILL ,它会立即终止。 这用于杀死不响应或忽略常规SIGINT错误进程。 如果你能抓住SIGKILL ,并且可能忽略它,那么除了重启机器之外,没有办法杀死一个错误的过程。

    另请注意,您在信号处理程序中调用printf() ,这是不允许的。 你不能指望这个工作。

    您可以在信号手册中查看信号安全function: http : //man7.org/linux/man-pages/man7/signal.7.html – printf不是它的一部分,所以所有的赌注都是关闭的。

    从联机帮助页:

    信号处理函数必须非常小心,因为在程序执行中的某个任意点可能会中断其他地方的处理。 POSIX具有“安全function”的概念。 如果信号中断了不安全函数的执行,并且处理程序调用了不安全函数,则程序的行为是未定义的。

    有关安全的替代方法,请参阅此问题: 使用write或async-safe函数从信号处理程序中打印int

      以上就是c/c++开发分享XCode优雅的程序关闭相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/549625.html

      (0)
      上一篇 2021年1月14日
      下一篇 2021年1月14日

      精彩推荐