当前位置:嗨网首页>书籍在线阅读

23-关机

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

6.6 关机

在设计嵌入式系统时,我们常常会忽略有序关机的重要性。不恰当地关机会影响启动时间,甚至会损坏某些文件系统。EXT2文件系统(它多年以来都是桌面Linux发行版的默认文件系统)的使用者经常会有这样的抱怨:当系统意外掉电后再启动时,fsck(file system check)会花费大量时间检查文件系统。对于那些配备了大容量磁盘系统的服务器来说,使用fsck检查一些大的EXT2分区会花上几个小时。

每个嵌入式系统往往都会有自己的关机策略。适用于某个系统的策略并不一定会适用于其他的系统。不同系统的关机规模也有所不同,复杂的系统会进行完整的System V方式的关机,而简单系统只使用一个简单的脚本来关机和重启。有几个Linux系统下的工具可以帮助实现关机操作,包括 shutdownhaltreboot 命令。当然,前提是这些工具必须能够适用于你所选择的架构。

一个关机脚本应该可以终止所有的用户空间进程,包括关闭这些进程打开的任何文件。如果使用 init ,执行命令 init 0 可以关闭系统。一般而言,关机进程首先会向所有的进程发送 SIGTERM 信号,通知它们系统正在关机。关机进程会等待一小段时间,确保所有进程得以完成自身的关机操作,比如关闭文件,保存状态等。之后,关机进程会向所有进程发送 SIGKILL 信号,终止这些进程。关机进程还应该卸载所有已经挂载的文件系统,并调用与具体架构相关的关机或重启函数。Linux的 shutdown 命令结合 init 完成这类行为。