Linux 关机流程引发的思考

6387阅读 0评论2012-12-19 今生路人甲
分类:LINUX

    自己做的系统碰到了一个问题,我的系统上面运行着monit和heartbeat,monit监控heartbeat的状态,当heartbeat进程出现问题的时候,monit会重新拉起heartbeat。这本来是一个perfect的功能,但是当重启时,heartbeat早于monit关闭,此时heartbeat又被拉起,导致heartbeat双方通信出现问题。下面分析下系统关机的过程,并验证下解决问题的推断。
  1. 验证用户身份
      只有root用户才可以执行关机或者重启命令,所以关机检查当前用户是不是超级用户。
      

点击(此处)折叠或打开

  1. bash-3.2$ id
  2. uid=502(com) gid=502(com) groups=502(com),503(piduser)
  3. bash-3.2$ /sbin/shutdown -h now
  4. shutdown: you must be root to do that!
     这里我们明显看到只有root用户才可以执行这条命令
  2.  解析命令行参数
      这里我们只分析shutdown -r now 这条命令
      这里的-r设置downlevel 为6
      0是关机,6是重启
  3. 检查关机命令是否在运行
  4. 生成关机pid,在/var/run/shutdwon.pid
  5. 忽略系统信号
  6. 执行关机
     在/var/log/messages我们可以看到这条日志shutting down for system reboot,说明系统开始执行关机流程了。
  7. 执行init
     关掉/etc/rc6.d下面以k开头的进程,然后执行kill -1 SIGTERM,最后执行kill -1 SIGILL
  8. 完成关机。
上一篇:Python 大杂烩
下一篇:linux 命令大杂烩