Linux进程的启动顺序是甚么
Linux进程的启动顺序是由系统初始化进程init开始的。在传统的SysVinit启动系统中,init进程是所有其他进程的父进程。init进程会依照一定的顺序启动系统中的各个服务和进程。
在SysVinit系统中,init进程会读取/etc/inittab文件来肯定要启动的进程。该文件中定义了运行级别(runlevel)和对应的启动脚本。运行级别是一个数字或字母,表示系统的区分状态,比如0表示关机,1表示单用户模式,2表示多用户模式(没有网络服务),3表示完全多用户模式,5表示带图形界面的多用户模式等。
根据运行级别,init进程会履行对应的启动脚本,启动相应的服务和进程。启动脚本一般寄存在/etc/init.d目录下,脚本的名称通常以字母S或K开头,后面随着一个数字,用于表示启动的顺序。以S开头的脚本表示要启动的服务,而以K开头的脚本表示要停止的服务。
例如,运行级别为3时,init进程会依照一定的顺序履行/etc/rc.d/rc3.d目录下所有以S开头的脚本,以启动相应的服务和进程。一样,在切换到其他运行级别时,init进程会履行相应运行级别下的脚本,启动或停止相应的服务和进程。
在新的init系统systemd中,启动顺序由unit文件来定义。unit文件是用于描写系统资源和服务的配置文件。systemd根据依赖关系来启动和管理各个unit。每一个unit都有一个唯一的名称和类型,例如.service表示系统服务,.target表示一组相关的服务或其他unit。
systemd使用Target作为运行级别的概念,区分的Target对应区分的系统状态。例如,multi-user.target表示多用户模式,graphical.target表示图形界面模式。每一个Target都有对应的unit文件,定义了要启动的服务和进程。
systemd启动时,默许会加载default.target,该文件包括了系统启动时要启动的服务和进程。在default.target中,systemd会依照依赖关系顺次启动各个unit。
总的来讲,Linux进程的启动顺序是由init或systemd进程依照配置文件中定义的顺序来启动的,根据运行级别或Target的区分,启动的服务和进程也会有所不同。
TOP