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