Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Linux上终止程序之前检测重启_Linux_Detect_Restart_Runlevel - Fatal编程技术网

如何在Linux上终止程序之前检测重启

如何在Linux上终止程序之前检测重启,linux,detect,restart,runlevel,Linux,Detect,Restart,Runlevel,我想在Linux上终止我的程序之前检测系统是否正在重新启动。 我尝试使用/var/run/utmp文件来检测运行级别,对其更改进行inotify,但似乎系统在收到信号之前关闭了这个程序。若我用telinit命令设置运行级别,我会发现关机,但若我只是用Ubuntu右上角的按钮重新启动,我不会发现 你知道怎么做吗?抓住SIGTERM信号,快速保存/执行任何操作,然后退出。您还有大约10秒的时间才能获得无法捕获的SIGKILL,您将被强制终止 如果系统没有向您发送允许正确关机的SIGTERM,请将您的

我想在Linux上终止我的程序之前检测系统是否正在重新启动。 我尝试使用/var/run/utmp文件来检测运行级别,对其更改进行inotify,但似乎系统在收到信号之前关闭了这个程序。若我用telinit命令设置运行级别,我会发现关机,但若我只是用Ubuntu右上角的按钮重新启动,我不会发现


你知道怎么做吗?

抓住
SIGTERM
信号,快速保存/执行任何操作,然后退出。您还有大约10秒的时间才能获得无法捕获的
SIGKILL
,您将被强制终止

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

有关信号处理,请参见
man 7信号
man 3信号动作


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

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

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

有关信号处理,请参见
man 7信号
man 3信号动作


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

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

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

有关信号处理,请参见
man 7信号
man 3信号动作


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

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

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

有关信号处理,请参见
man 7信号
man 3信号动作



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

正常情况下,重新启动程序会向您的进程发送一个
SIGTERM
。为什么你抓不到它?作为一个运行在机器上的程序,您是否有责任知道为什么要关闭,如果您有状态,您是否只想保存它并在任何情况下退出?通常,重新启动会向您的进程发送一个
SIGTERM
。为什么你抓不到它?作为一个运行在机器上的程序,您是否有责任知道为什么要关闭,如果您有状态,您是否只想保存它并在任何情况下退出?通常,重新启动会向您的进程发送一个
SIGTERM
。为什么你抓不到它?作为一个运行在机器上的程序,您是否有责任知道为什么要关闭,如果您有状态,您是否只想保存它并在任何情况下退出?通常,重新启动会向您的进程发送一个
SIGTERM
。为什么你抓不到它?作为一个运行在盒子上的程序,你的职责是知道你为什么要关机吗?如果你有状态,你不想保存它并在任何情况下退出吗?你的意思是捕获sigterm,然后检查运行级别吗?@JaniBaramidze我不知道检查系统是否正在重新启动的标准方法。我的系统上没有运行级别,因为我运行了systemd。通过捕获
SIGTERM
可以解决重新启动问题,并在流程管理器出于任何其他原因也要关闭您时引入适当的关闭。@Janibramize为什么需要将“重新启动前”关闭和“定期关闭”分开?你是什么意思?如果系统正在重新启动/关闭,我只需要写入一些文件,然后它就会杀死我的计算机program@JaniBaramidze无论系统是否重新启动,都可以告知进程关闭。因此,对于您在这里的第一个评论,我想知道的是,为什么您需要在收到SIGTERM后检查运行级别?例如,当您在控制台中键入reboot时,您的程序将从您的init守护进程(通常)获得一个SIGTERM信号。SIGTERM用于告诉进程/程序它应该保存它的内容/清理,然后退出。我想知道的是,重启部分是否重要?你是说捕获sigterm,然后检查运行级别?@janibramidze我不知道有什么标准方法可以检查系统是否正在重启。