不使用pkill优雅退出程序的最佳方法

Ang*_*Koh 5 c++ linux

我目前正在使用脚本来调用pkill终止我的C++程序.但是我注意到使用pkill时没有从我的跟踪中调用析构函数.

还有另一种好方法可以优雅地退出程序吗?
pkill看起来有些不整洁,缓冲区中的一些日志不会被记录下来.我希望能够刷新我的fstream并以编程方式关闭所有资源(而不是依靠O/S来清理我的混乱).

该应用程序24/7运行没有任何问题,我唯一想停止它是在维护期间.该应用程序没有任何用户界面供我输入exit.

zrv*_*van 4

您可以通过定义一个信号处理程序来实现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