在C语言中它会更快一些,但语言选择并不会影响性能。并行执行各种任务通常更有效,而不是像简单的init系统那样等待每个任务按顺序完成。例如,sshd和httpd可以同时启动,因为它们都不需要另一个已经运行。
没有单一的“Linux启动序列”。每个发行版都有自己的; 他们都没有共同点。它可以是C,Perl,Haskell,任何东西; 唯一的要求是名称的可执行文件/init
存在于initramfs或/sbin/init
根文件系统中。
该/etc/rc?.d
方案只是20年前,甚至30年的Unix启动过程的扩展。最早的Unix系统很少重启,所以他们会有一个简单的脚本,/etc/rc
或类似的,由init启动并按顺序启动各种守护进程。
即使在今天,SysV init也被用来启动所有这样的脚本,尽管确切的方法可能会有所不同。最初,系统会/etc/rc?.d
按顺序启动所有脚本; 目前Debian使用Makefile风格的依赖项。
一些发行版--Ubuntu,Chrome OS,Fedora直到第14版 - 已经切换到Upstart,它是用C语言编写的,并且是“基于事件的”,允许守护进程并行启动。另一个初始化系统systemd似乎在迅速普及 - 它在Fedora和OpenSuSE中默认使用。它也用C语言编写。(两个系统仍然读取文本配置文件以决定启动哪些守护进程。)
仍然坚持使用SysVinit的那些发行版通常是为了“简单”而做的; 最常见的[引用需要]参数似乎是关于shell脚本比等效的C代码更容易维护(虽然所说的shell脚本由90%copypasta组成),以及对引入额外的库依赖性[凡是主观的]的致命恐惧。你可以在2012年5月的Debian邮件列表中看到这个,这个,这个和这个讨论的主题。
(免责声明:我自己是一名系统用户。)