Linux 系统关闭时可以启动进程吗?

Linux 系统关闭时可以启动进程吗?

这个问题是关于一个脚本,该脚本持有一个锁以防止同时执行其自身的多个实例,该脚本由各种进程在特定时间执行,并在特定情况下发送重启命令。

假设请求重新启动,并且脚本休眠几秒钟(以防止在重新启动开始之前释放锁定)。然后脚本将收到信号并自行结束(从而释放锁定)。

问题:是否存在一个可能的时间窗口,其中该脚本已被重启事件停止,但仍有一些其他进程正在运行并设法再次启动该脚本?

我个人的感觉是,Linux 系统首先会切换到某种状态,在该状态下,通常不会执行新进程,然后正在运行的进程会停止。但这只是一厢情愿的想法,因为我找不到相关文档。

一些澄清:

a) 这与锁定文件未正确删除无关。当我使用 flock 时,脚本结束时锁定就会消失,即使在崩溃的情况下也是如此。

b) 大多数情况下,脚本由 at 守护进程以 root 权限启动。

答案1

您的个人感受有一定的道理。

我不会讲得太多,但 Linux 启动过程可以总结如下。(可能会有变化,因为 init 不再是默认的)。

  1. 引导加载程序将控制权移交给 Linux 内核和init
  2. init然后检查清单并开始遍历其运行模式
  3. init进入运行级别 1。这也称为单用户模式,在此模式下,系统将启动正常运行所需的基本服务。只有属于 root 的进程才能启动。
  4. init进入运行级别 2。与上述类似,但是是多用户模式。其他用户的进程加入进来。
  5. 运行级别 3 启动网络。
  6. 4 被跳过(我从来不明白为什么。我猜是永久保留以备将来使用)。init而是直接转到 5,这是xorg启动的地方。许多用户空间服务(网络服务器、邮件等)通常都是从这里启动的。

现在,回答你的问题,我发现该脚本在关闭系统的过程中启动的可能性很小。如果我没记错的话,在此过程中无法以正常方式启动新进程。据我所知,主要担心的是脚本会启动并留下一个锁定文件,该文件会在重新启动期间留下,从而阻止脚本运行,对吗?在这种情况下,我会做一个小的启动脚本,可能在运行级别 3 上,如果找到该锁定文件,它会删除它。

相关内容