init x, halt, shutdown, poweroff, reboot等之间的区别和联系

简介: init x, halt, shutdown, poweroff, reboot等之间的区别和联系

前言

最近这些天,每天晚上关机前,都会在osc上发一条动弹,“我要init 0了,各位晚安啊”,这是一件再正常不过的事情了。

image.png

看似很平常的一件事情,不过在昨晚就被一位同学的回复给难住了,到底是什么样的回复呢?让我们继续往下看吧。

image.png

从上图我们可以看到,那个回复就是“init 0和halt有区别不。。。。”,我一下就被这个问题给难住了,之前我了解的是init 0 最后调用了halt,但具体的什么区别和联系,真的还不太清楚哦。显然上述不足以回答该同学,且没有任何的说服力。所以带着这样的一个问题,开始了我的探索之路。


相关调研

遇到这个问题的时候,首先想到的还是借助于搜索引擎。最近一段时间我所使用的搜索引擎的顺序有点变化,以前是google-baidu,现在变成了bing-google-baidu(or yandex),不过这两天鉴于google.com.hk情况有点好转,最后还是首选了google一下上述的问题。


经过一番的调研和过滤,现将几个个人认为比较好的回答整理如下(如果想更进一步的了解,可以参考我之后的引用部分):


halt(1M) brings down the machine to the PROM (on SPARC) immediately, with very little regard to running the scripts in /etc/rc[0-6].d to take things down cleanly. reboot(1M) is the same, except instead of just stopping the OS, it reboots the machine.

halt命令直接将机器进入PROM,基本不执行/etc/rc[0-6]脚本去结束一些进程。reboot命令和它一样,除了结束运行操作系统并重启机器。


这种情况下某些进程由于非正常结束可能会导致数据的丢失。


注:PROM stands for programmable read-only memory


init(1M) would run the scripts in /etc/rc[0-6].d to (hopefully) take down the running processes cleanly, and then call halt, reboot, or poweroff(1M) depending on the argument you give it.

init命令将运行/etc/rc[0-6]脚本,该脚本将正常的结束所有正在运行的进程,然后根据你的命令行参数调用halt,reboot或者poweroff命令。


shutdown(1M) allows you to first give a time when the machine will shutdown, prints warnings to users logged in (and possibly to any NFS clients), and then calls init(1M). init then does things like described in the above paragraph.

shutdown命令在机器将要关机之前给了你一段时间,给那些已经登陆到系统的用户(和可能的NFS客户端)打印警告信息,然后调用init,接着init去做上述描述的事情。


Using shutdown or init is usually the best way to go about things AFAIK.

就我目前所知使用shutdown或者init是最好的方式。


注: AFAIK stands for As Far As I Konw


I try to keep in the habit of using shutdown(1M) since by default it gives a grace period before doing things. This way if you're /not/ on the machine you think you are (you're on production, and not a testing server), you still have an opportunity to cancel things before accidentally disrupting service.

综上所述, 基本的依赖关系为:

shutdown->init->/etc/rc[0-6]->halt/reboot/poweroff


扩张阅读

1M的含义

大家看到上述的halt(1M), init(1M), shutdown(1M)等一定都很好奇,这个1M是表示啥意思啊?下面我们将解答这个问题:


在linux下当我们遇到某命令不知道该如何使用的时候,linux为我们提供了一个非常方便的工具man,如man ls就可以查看ls命令的具体用法。但是有些命令比较复杂,会分成多个section来讲解。有时我们只关注某个section的内容,这时我们就需要用到man [1-8] ls这个命令了,如man 3 ls直接跳到section 3阅读。


从wikipedia上我们可以看到,linux类的一些系统有8个section。


The manual is generally split into eight numbered sections, organized as follows (on Research Unix, BSD, OS X and Linux):

Section Description
1 General commands
2 System calls
3 Library functions, covering in particular the C standard library
4 Special files (usually devices, those found in /dev) and drivers
5 File formats and conventions
6 Games and screensavers
7 Miscellanea
8 System administration commands and daemons

[from wikipedia]

而Unix System V使用的section与上面的有所区别,其中有一个section的名字就是1M,表示这个section描述的都是系统管理命令和一些daemon进程信息。

Unix System V uses a similar numbering scheme, except in a different order

Section Description
1 General commands
1M System administration commands and daemons
2 System calls
3 C library functions
4 File formats and conventions
5 Miscellanea
6 Games and screensavers
7 Special files (usually devices, those found in /dev) and drivers

[from wikipedia]

init level

由于我的系统是fedora,所以下面主要介绍redhat的init level信息:

Red Hat Linux/Fedora runlevels

Code Information
0 Halt
1 Single-user mode
2 Multi-user mode console logins only (without networking)
3 Multi-user mode, console logins only
4 Not used/User-definable
5 Multi-user mode, with display manager as well as console logins (X11)
6 Reboot

[from wikipedia]

结论

本文主要由一条动弹的回复,引出了init, halt ,reboot等命令之间的区别,并经过充分的调研,整理成博文。从上述的分析我们得出的结论是:最好使用shutdown命令来关机,因为他会在关机之前通知所有的已经登陆的用户和nfs client,正常的结束所有进程信息,正常关机。


不过对于我,单个用户且没有任何NFS client来说,使用init 0关机也没什么大碍,所有进程都会正常结束掉。


文中如有不同意见之处,欢迎留言。


引用

[1] http://unix.derkeiler.com/Newsgroups/comp.unix.solaris/2006-03/msg00380.html


[2] http://en.wikipedia.org/wiki/Man_page


[3] http://en.wikipedia.org/wiki/Runlevel


目录
相关文章
|
Web App开发 域名解析 缓存
如何在 Ubuntu 20.04 上安装 Node.js 和 npm
本文我们主要为大家介绍在 Ubuntu 20.04 上安装 Node.js 和 npm 的三种不同的方式。
168531 7
如何在 Ubuntu 20.04 上安装 Node.js 和 npm
|
缓存 Linux 开发工具
CentOS 7- 配置阿里镜像源
阿里镜像官方地址http://mirrors.aliyun.com/ 1、点击官方提供的相应系统的帮助 :2、查看不同版本的系统操作: 下载源1、安装wget yum install -y wget2、下载CentOS 7的repo文件wget -O /etc/yum.
268892 0
|
安全 Unix Linux
VMware Workstation 17.6.3 发布下载,现在完全免费无论个人还是商业用途
VMware Workstation 17.6.3 发布下载,现在完全免费无论个人还是商业用途
118601 65
|
安全 Linux 数据安全/隐私保护
linux root登陆,密码正确但,错误提示su: Authentication failure
通过系统化的排查和解决方案,可以有效应对 `su: Authentication failure` 问题,确保系统安全和用户权限的正确管理。
7002 36
|
Unix Linux 虚拟化
VMware Workstation 17.6.2 发布下载,现在完全免费无论个人还是商业用途
VMware Workstation 17.6.2 发布下载,现在完全免费无论个人还是商业用途
54899 16
VMware Workstation 17.6.2 发布下载,现在完全免费无论个人还是商业用途
|
运维 监控 Linux
服务器管理面板大盘点: 8款开源面板助你轻松管理Linux服务器
在数字化时代,服务器作为数据存储和计算的核心设备,其管理效率与安全性直接关系到业务的稳定性和可持续发展。随着技术的不断进步,开源社区涌现出众多服务器管理面板,这些工具以其强大的功能、灵活的配置和友好的用户界面,极大地简化了Linux服务器的管理工作。本文将详细介绍8款开源的服务器管理面板,包括Websoft9、宝塔、cPanel、1Panel等,旨在帮助运维人员更好地选择和使用这些工具,提升服务器管理效率。
|
监控 负载均衡 网络协议
一文带你浅入浅出Keepalived
一文带你浅入浅出Keepalived
10509 117
|
存储 Linux
挂在mount报错can't read superblock修复过程
`can't read superblock`错误表明存在文件系统或硬件问题,解决这类问题需要先从软件层面尝试修复,无效时再考虑硬件替换。值得注意的是,数据备份对于防范这类突发故障至关重要,应定期进行数据备份,以最大限度减少数据丢失风险。
8520 3
|
网络协议 关系型数据库 MySQL
MySQL报ERROR 2002 (HY000)解决
通过上述步骤,可以有效地解决MySQL连接时出现的 `ERROR 2002 (HY000)`错误。这些步骤包括检查和启动MySQL服务、配置文件检查、套接字文件检查、日志文件分析、进程检查、防火墙设置、客户端配置和最终的MySQL重装。确保每个步骤都按顺序执行,有助于快速定位和解决问题,使MySQL服务器恢复正常运行。
10103 0

热门文章

最新文章