什么样的程度可以依赖写入磁盘时,SIGTERM给出?

我正在开发Linux,并有一个守护进程,它应该写入磁盘时被杀死。 守护进程可以configuration为侦听SIGTERM并在接收到信号时写入磁盘。

我也熟悉loginpipe理器发出的PrepareForShutdown D-Bus信号。 听SIGTERM结果是简单的代码,而不是禁止closures和收听PrepareForShutdown信号。 SIGTERM另一个优点是,即使在系统closures的情况下,守护进程也会被礼貌地杀死。

但是,我不确定在关机时依赖内核发送的SIGTERM信号是多么的安全。 在关机时SIGTERM总是发送到每个进程有足够的时间执行一个小(<1 kB)的写入磁盘?

我担心的一个问题是,我可能有足够的时间在某些硬件上写入磁盘,而不是在其他硬件上写入,所以看起来很难testing。 PrepareForShutdown信号也是如此,但是至less允许有足够的时间进行磁盘写入是该信号合同的一部分。 我的问题是每个进程在关机时收到的SIGTERM信号是否可以这样说。

仔细阅读信号(7) – 所以你不能从信号处理程序fprintf 。 通常最明智的做法是在信号处理程序中设置一些volatile sigatomic_t变量,并在其外部测试该变量。

重点不仅是将(2)一些数据写入文件系统。 它是将数据写入磁盘(它可能留在内核文件系统缓冲区中)。 读同步(2) & fsync(2) 。

不能(在任何情况下)确保数据写入磁盘(特别是停电时)。

我不会打扰和使用系统日志(3) (即让我的SIGTERM处理程序设置一个volatile sigatomic_t标志,并稍后在其他地方测试该标志;在终止调用syslog …)。 然后记录你的程序正在写入到终止的系统日志,并保留系统日志被写入到系统管理员的某个地方,或者在网络上的某个磁盘上的责任。

关机的具体行为主要是一个系统管理员问题。 这实际上取决于实际的系统(包括Linux发行版和硬件)以及系统管理员的技能。 有些文件系统是远程文件系统(对于便宜的USB密钥),文件系统速度很慢(写入文件系统可能会丢失)。

想象一下,一个带有buggy守护进程的系统(不是你的,而是其他的)需要很长的时间来终止。 那么你的守护进程可能没有时间做一些明智的事情。 所以你必须相信系统管理员。

我不明白你为什么问你的问题。 这取决于整个系统是如何管理和建立的。 它在百万美元的服务器和笔记本电脑上确实是不同的。