我目前正在使用脚本来调用pkill终止我的C++程序.但是我注意到使用pkill时没有从我的跟踪中调用析构函数.
还有另一种好方法可以优雅地退出程序吗?
pkill看起来有些不整洁,缓冲区中的一些日志不会被记录下来.我希望能够刷新我的fstream并以编程方式关闭所有资源(而不是依靠O/S来清理我的混乱).
该应用程序24/7运行没有任何问题,我唯一想停止它是在维护期间.该应用程序没有任何用户界面供我输入exit.
您可以通过定义一个信号处理程序来实现SIGTERM这一点:
在您的包含块中的某个位置:
#include <signal.h>
#include <stdio.h>
Run Code Online (Sandbox Code Playgroud)
是的,我们正在做我的C风格!
在代码初始化部分的某处:
signal (SIGTERM, handler);
Run Code Online (Sandbox Code Playgroud)
然后定义信号处理程序代码(刷新所有内容等):
void handler(int num)
{
// we might use this handler for many signals
switch (num)
{
case SIGTERM:
// clean up code.
break;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当您运行 时pkill <app>,其中<app>是可执行文件的名称,将运行 的代码handler()。
如果没有开关,默认SIGTERM信号将发送到应用程序。如果您选择使用不同的信号,则必须确保发送与在 .c 文件中“捕获”的信号相同的信号handler()。
man 7 signal当然可以找到相关信息man kill。