在类似Unix的操作系统上,telinit和init提供进程控制初始化。系统引导时将使用它们。 本文档介绍telinit和init的Linux版本。
查看英文版
1 telinit 运行系统环境
2 telinit 说明
3 telinit 语法
Linux
查看英文版
/sbin/init [ -a ] [ -s ] [ -b ] [ -z xxx ] [ 0123456Ss ]
/sbin/telinit [ -t sec ] [ 0123456sSQqabcUu ]
甲运行级别是只允许的处理的选择的组中存在的系统的软件配置。由init生成的每个运行级别的进程都在/ etc / inittab文件中定义。Init可以是八个运行级别之一:0到6以及S或s。通过特权用户运行telinit来更改运行级别,该运行会将适当的信号发送到init,告诉它要更改为哪个运行级别。
运行级别0,1,和6被保留。运行级别0用于停止系统,运行级别6用于重新引导系统,运行级别1用于使系统进入单用户模式。运行级别S并不是要直接使用,而是用于输入运行级别1时执行的脚本。
运行级别7 - 9也是有效的,虽然不是真正的记录。这是因为“传统” Unix变体不使用它们。如果您感到好奇,运行级别S和s实际上是相同的。在内部,它们是同一运行级别的别名。
在将init作为内核 引导序列的最后一步调用之后,它将查找文件/ etc / inittab以查看是否存在initdefault类型的条目。initdefault条目确定系统的初始运行级别。如果没有这样的条目(或根本没有/ etc / inittab),则必须在系统控制台上输入运行级别。
运行级别S或s使系统进入单用户模式,并且不需要/ etc / inittab文件。在单用户模式下,将在/ dev / console上打开根shell 。
进入单用户模式时,init会将控制台的stty设置初始化为合理的值。设置为“ CLocal”模式。硬件速度和握手不变。
当进入一个多用户首次模式,初始化执行的引导和bootwait条目,以允许安装的文件系统之前,用户可以登录,然后匹配的运行级别的所有条目都被处理。
启动新进程时,init首先检查文件/ etc / initscript是否存在。如果是这样,它将使用此脚本启动该过程。
每次孩子终止,初始化记录的事实,它在死亡原因的/ var / run / utmp文件和在/ var /日志/ wtmp文件,提供这些文件是否存在。
生成所有指定的进程后,init会等待其后代进程之一死亡,以等待“ powerfail”信号,或者直到telinit发出信号更改系统的运行级别。当出现上述三种情况之一时,它将重新检查/ etc / inittab文件。新条目可以随时添加到此文件中。但是,init仍在等待以上三个条件之一发生。为了提供瞬时响应,telinit Q(或q)命令可以唤醒init来重新检查/ etc / inittab文件。
如果init不在单用户模式下并且接收到powerfail信号(SIGPWR),它将读取文件/ etc / powerstatus。然后,它将基于此文件的内容启动命令:
如果/ etc / powerstatus不存在或包含其他任何内容,则字母F,O或L,init的行为就像读取了字母F一样。
不建议使用SIGPWR和/ etc / powerstatus。希望与init进行交互的人应该使用/ dev / initctl控制通道。有关更多信息,请查看sysvinit软件包的源代码。
当请求init更改运行级别时,它将向新运行级别中未定义的所有进程发送警告信号SIGTERM。然后等待5秒钟,然后通过SIGKILL信号强制终止这些过程。请注意,init假定所有这些进程(及其后代)都与init最初为其创建的进程组相同。如果任何进程更改了其进程组的隶属关系,它将不会收到这些信号。此类过程需要单独终止。
Init为其所有子代设置以下环境变量:
PATH | /bin:/usr/bin:/sbin:/usr/sbin |
INIT_VERSION | 顾名思义。有助于确定脚本是否直接从init运行。 |
RUNLEVEL | 当前系统运行级别。 |
PREVLEVEL | 上一个运行级别(在更改运行级别后特别有用)。 |
CONSOLE | 系统控制台。这实际上是从内核继承的;但是,如果未设置init,则默认情况下会将其设置为/ dev / console。 |
/sbin/telinit is linked to /sbin/init. 它采用一个字符的参数,并向init发出信号以执行适当的操作。以下参数用作telinit的指令:
0,1,2,3,4,5或6 | 告诉init切换到指定的运行级别。 |
a, b, c | 告诉init仅处理运行级别为a,b或c的/ etc / inittab文件条目。 |
Q or q | 告诉init重新检查/ etc / inittab文件。 |
S or s | 告诉init切换到单用户模式。 |
U or u | 告诉init重新执行自身(保留状态)。不会重新检查/ etc / inittab文件。运行级别应的一个小号,小号,1,2,3,4,或5,否则请求将被忽略。 |
telinit还可以告诉init发送信号SIGTERM和SIGKILL信号之间应等待多长时间。缺省值为5秒,但是可以使用-t sec选项更改。
telinit只能由具有适当特权的用户调用。
的初始化如果二进制检查初始化或使用telinit通过查看它的进程ID; 实际的init的进程ID始终为1。由此可见,除了调用telinit之外,还可以只使用init作为快捷方式。
Init在/ dev(/ dev / initctl)中的fifo上侦听消息。Telinit使用它与init进行通信。该接口没有很好的文档说明;要了解有关界面的更多信息,用户必须查看源本身。
初始化对多个信号做出反应,包括:
SIGHUP | 与telinit q具有相同的效果。 |
SIGUSR1 | 收到此信号后,init将关闭并重新打开其控制fifo / dev / initctl。当重新挂载/ dev时,对引导脚本很有用。 |
SIGINT | 通常,当按下Ctrl-Alt-Del时,内核会将此信号发送给init。它激活ctrlaltdel操作。 |
SIGWINCH | 当敲击KeyboardSignal键时,内核发送此信号。它激活kbrequest动作。 |
/etc/inittab
/etc/initscript
/dev/console
/var/run/utmp
/var/log/wtmp
/dev/initctl
可以从引导监视器(例如LILO)传递许多标志到init 。初始化接受以下标志:
-s, S, single | 单用户模式启动。在这种模式下,将检查/ etc / inittab并通常在启动单用户模式外壳程序之前运行启动rc脚本。 |
1-5 | 要启动的运行级别。 |
-b, emergency | 直接启动到单个用户外壳程序中,而无需运行任何其他启动脚本。 |
-a, auto | 如果LILO引导加载程序使用默认命令行(无需用户干预)引导内核,则会在命令行中添加单词“ auto ”。如果找到此文件,则init 会将环境变量“ AUTOBOOT ” 设置为“ yes ”。请注意,您不能将其用于任何安全措施。当然,用户可以在命令行上手动指定“ auto ”或-a。 |
-z xxx | -z的参数将被忽略。您可以使用它来扩展命令行,以便在堆栈上占用更多空间。然后,Init可以操纵命令行,以便ps显示当前运行级别。 |
telinit还可以告诉init发送信号SIGTERM和SIGKILL信号之间应等待多长时间。缺省值为5秒,但是可以使用-t sec选项更改。
telinit只能由具有适当特权的用户调用。
的初始化如果二进制检查初始化或使用telinit通过查看它的进程ID; 实际的init的进程ID始终为1。由此可见,除了调用telinit之外,还可以只使用init作为快捷方式。
查看英文版
tabs | tac | talk | tail | tcopy | tty | tar | tbl | tcpdump | tcsh | time | tee | timex | telnet | test | top | touch | tput | tr | troff | traceroute |
未知的网友