0

我想在它终止我在 Linux 上的程序之前检测到系统正在重新启动。我尝试使用 /var/run/utmp 文件来检测运行级别,将 inotify 放在其更改上,但似乎系统在我收到信号之前正在关闭该程序。如果我用 telinit 命令设置运行级别,我会用它来捕捉关机,但如果我只是用 Ubuntu 右上角的按钮重新启动,就不会捕捉到它。

知道怎么做吗?

4

1 回答 1

3

捕捉SIGTERM信号并快速保存/执行任何操作,然后退出。你有大约 10 秒的时间才能得到SIGKILL你无法捕捉的东西,你将被强制终止。

如果系统没有向您发送SIGTERM允许正确关机的信息,请将您的系统更改为正确的,这是执行此操作的标准方法。

有关信号处理,请参见man 7 signalman 3 sigaction

(请注意,我不知道检查系统是否正在重新启动的标准方法,我认为不存在这种情况。但如上所述,一个合适的系统发送给您SIGTERM并让您进行清理/退出. 硬重启除外,因为那几乎相当于拉电源线。)

于 2014-12-01T11:24:24.033 回答