我可以在不关闭所有正在运行的程序的情况下关闭Ubuntu系统。我认为这不应该发生

  1. 当我关闭Ubuntu系统时,它并不限制我,但允许我关闭我的系统而不关闭所有程序。
  2. 为什么它不限制我关闭所有程序?

Ubuntu将发送SIGTERM信号,以允许正在运行的应用程序正常终止和关闭其打开的进程。 只有当应用程序不听SIGTERM时才会被杀死。

如果正在运行的应用程序需要用户交互(使用LibreOffice中打开的未保存文档进行测试),则关闭将停止,直到用户进行交互。

在多用户系统上,只要其他用户登录,用户启动的关闭就会暂停。我们还需要root权限才能关闭。 然后SIGTERM信号将被发送到所有运行会话中的所有打开的应用程序。

如果假设在超时( 90秒 )之后用户或应用程序没有对SIGTERM信号做出反应,则应发出SIGKILL,这样才会导致丢失未保存的数据。 由upstart发布的SIGTERM的默认KILL超时要短得多( 5秒 )。

然而,对当前版本的测试表明,我们总是可以关闭而不会被提示保存我们其他登录用户的未完成工作。 因为这确实可能导致数据丢失,我认为这是一个错误:

根据我对Ubuntu和其他Linux发行版的经验。 关闭计算机时,内核会自动向所有打开的程序发送关闭通知。 然后它在杀死包括网络在内的所有进程后关闭。 Windows的function有点不同,如果打开的进程需要保存文件,关闭过程会暂停一段时间,直到观察到用户交互。

shutdown通过发信号通知init进程来执行其工作,要求它更改运行级别。 运行级别0用于暂停系统。

因此当运行级别更改为0即init时,init被杀死。 实际上,init是系统中运行的所有进程的父进程。 如果父进程死亡,那么所有子进程将成为僵尸,即它们不是真正的进程而且不是很大。

即所有人都关闭。

阅读其Man-Page ,您所要做的就是关闭关机过程的一些研究。