小智 3
这种行为可能会根据发行版/shell/配置而有所不同。在我的系统(Gentoo/SysVinit)上,当我运行reboot(可能是你的场景3)时会发生以下情况:
\n重新启动命令委托关闭(来自man reboot):
\n\n如果在系统未处于运行级别 0 或\n6 时(换句话说,当系统正常运行时)调用暂停或重新引导,则将调用 shutdown(使用 -h 或 -r 标志)。有关详细信息,请参阅 shutdown(8) 联机帮助页。
\n
所有进程(包括 shell)都会收到一个 SIGTERM,允许 3 秒进行清理(来自man shutdown):
\n\n所有进程首先都会收到 SIGTERM 信号\n系统即将关闭的通知。\n这使得像 vi(1) 这样的程序有时间保存正在编辑的文件,邮件和新闻处理程序有机会干净地退出,\netc。
\n
\n\n-t sec 告诉 init(8) 在更改到另一个运行\xe2\x80\x90 级别之前,在向所有进程发送警告 (SIGTERM) 和终止信号 (SIGKILL) 之间等待 sec 秒。如果未指定值,则这两个信号之间的默认时间为三秒。警告:当 shutdown\n调用 init 执行关闭(默认行为)时,init 检查是否所有进程都已终止,并在其子进程全部终止后提前停止等待。\nxe2\x80\x90\nated。当使用 -n 标志调用 shutdown 时,即使所有其他进程都已终止,它也会等待指定的完整时间(或三秒)。
\n
Bash 实际上忽略了 SIGTERM(来自man bash):
\n\n当 bash 是交互式的时,在没有任何陷阱的情况下,它会忽略\nSIGTERM(因此 Kill 0 不会杀死交互式 shell)
\n
因此init更改运行级别,(可能)发送另一个 SIGTERM,然后发送 SIGKILL (来自man init):
\n\n当 init 被请求更改运行级别时,它会向新运行级别中未定义的所有进程发送警告信号 SIGTERM。然后等待 3 秒,然后通过 SIGKILL 信号强制终止这些进程。
\n
太长了;bash 将在没有正常关闭的情况下退出,其他程序可能会退出,但我不会依赖任何特定行为。
\n| 归档时间: |
|
| 查看次数: |
105 次 |
| 最近记录: |