Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我想在它终止我在 Linux 上的程序之前检测到系统正在重新启动。我尝试使用 /var/run/utmp 文件来检测运行级别,将 inotify 放在其更改上,但似乎系统在我收到信号之前正在关闭该程序。如果我用 telinit 命令设置运行级别,我会用它来捕捉关机,但如果我只是用 Ubuntu 右上角的按钮重新启动,就不会捕捉到它。
知道怎么做吗?
捕捉SIGTERM信号并快速保存/执行任何操作,然后退出。你有大约 10 秒的时间才能得到SIGKILL你无法捕捉的东西,你将被强制终止。
SIGTERM
SIGKILL
如果系统没有向您发送SIGTERM允许正确关机的信息,请将您的系统更改为正确的,这是执行此操作的标准方法。
有关信号处理,请参见man 7 signal和man 3 sigaction。
man 7 signal
man 3 sigaction
(请注意,我不知道检查系统是否正在重新启动的标准方法,我认为不存在这种情况。但如上所述,一个合适的系统会发送给您SIGTERM并让您进行清理/退出. 硬重启除外,因为那几乎相当于拉电源线。)