在Linux上触发C应用程序的干净关闭

问题描述 投票:1回答:1

是否有可能在Linux系统上触发用C编写的应用程序的“干净”关闭? “干净”是指解除对接口等的初始化的解决方案。就像C ++中对象的析构函数一样,但对于我的C应用程序。

我知道可以使用systemd关闭服务,但我的应用程序不是服务。我正在使用systemd.service启动我的应用程序,但就我理解的systemd服务而言,应用程序本身被视为onehot(在开始时进行初始化然后进入while(1)循环)。

是否有可能通过系统或类似的Linux功能突破循环?这种问题的“标准”解决方案是什么?

int main (int argc, char **argv){
  // ... some initialization
  printf("Warming up!\n);

  while(keepRunning){
    // do stuff
    printf("Running!!\n");
  }
  // de-initialize
  printf("By by\n");
}

我希望systemd将keepRunning的值更改为0.但我认为这太容易了。

c linux kill shutdown
1个回答
0
投票
  • 设置信号处理程序(在sigaction的SA_RESTART中没有.sa_flags标志)用于应该杀死应用程序而不跳过清理代码的信号。
  • 让信号处理程序设置一个原子/ sig_atomic_t标志(或清除你的keepRunning标志,但通常相反,以便你可以使用它来记录信号编号)。
  • 当你得到一个EINTR或在任何其他时间,检查标志并开始失败,如果它已设置。 (即,如果在C中,或者在C ++中抛出异常,则开始返回失败信令返回值。)
© www.soinside.com 2019 - 2024. All rights reserved.