在 procd 执行/etc/rc.d/S*时,其参数为”boot”(例如:/etc/rc.d/S00sysfixtime boot),这样就会执行
每个脚本里面的 boot 函数,也可能是间接执行 start 函数。/etc/rc.d/下的所有脚本都是链接到/etc/init.d/下的脚本。
procd在初始化过程中注册了相应的信号处理函数
procd进程在收到信号时,会调用相应的信号处理函数
最后通过在uloop_run()的cb回调函数中调用下面函数,执行inittab中指定的脚本
execlp:
/etc/rc.d/K99call_rc6 shutdown
读取 /etc/inittab
::sysinit:/etc/init.d/rcS S boot
::shutdown:/etc/init.d/rcS K shutdown
tts/0::askfirst:/usr/libexec/login.sh
ttyS0::askfirst:/usr/libexec/login.sh
tty1::askfirst:/usr/libexec/login.sh
最终其实就是 读取 /etc/rc.d/ 下的启动脚本,逐个执行。 /etc/rc.d/ 目录文件实例:
重点补充
从前面知识了解到/etc/rc.d/中存放的都是K+数字+/etc/init.d/对应的脚本名字或者S+数字+/etc/init.d/对应的脚本名字
当我们以 enable 参数调用启动脚本时,系统会创建一个该脚本文件的符号链接(例如 S10example、K15example),放在/etc/rc.d/目录下,而当以 disable 参数调用脚本时,系统会删除该符号链接。
这些对应的脚本中的 START= 和 STOP=(就是K或者S后面的数字) 分别决定了该脚本会在系统启动过程和系统关机过程的哪个点执行,数字越小越先执行。
也就是开机的时候会按照数字从小到大执行S开头的脚本来启动对应的程序,
而关机的时候会按照数字从小到大执行K开头的脚本来关闭对应的程序。