FreeBSD系统启动进程:init(4) 你可以看到我有四个可获得的拨号终端,但它们都被关闭了。如果我想让用户通过调制解调器访问我的FreeBSD系统,我就必须至少打开它们中的一个,还必须决定是否让这些用户可以用root身份登录;如果不,就把单词“secure”改为“insecure”。你是否看到getty栏含有数字9600,它说明数据传输率为9600bps。因为现在很多调制解调器都有更高的速率,我也可以把它改为57600。最后,最好读一下FreeBSD handbook中的拨号服务部分。 /etc/ttys文件的最后一部分是网络或伪终端。你会看到它们有很多,准确地说是255个,范围从: # Pseudo terminals ttyp0 none network 到 ttySv none network 且缺省情况下它们都没有被允许。 如果你为了使/etc/ttys更改生效以使init使用这些更改,可以超级用户的身份向init发送一个HUP信号,如: kill -1 1 这里前面的-1代表信号1(HUP),而后面1代表进程1(init)。 那么现在,哪个/etc/ttys文件中提到的getty程序继续保持运行呢?man 8中对getty的描述如下: 描述 init(8)调用getty程序打开并初始化tty行,读取一个登录名,然后调用login(1)。 所以,init读取/etc/ttys并在每个你在配置文件中设定的终端上启动一个getty进程。getty的工作是监视终端看是否有人试图登录。如果有的话,getty将启动登录程序校验用户的登录名和口令。如果校验合格,登录程序会启动用户的登录命令解释器并把用户置于他们的宿主目录下。当用户具有一个命令解释器后,他们就可以与操作系统交互了。现在它就可以让命令解释器解释用户的输入并确保启动了必要的进程。 当一个用户退出登录时,再次调用init启动其它的getty进程以继续监视终端等待其它的登录尝试。 让我们看一下ps命令的输出来总结一下刚才这次引导的整个过程,FreeBSD 4.1缺省已经安装了ps程序。我将用-ax开关以包含系统进程: ps -ax PID TT STAT TIME COMMAND 0 ?? DLs 0:00.01 (swapper) 1 ?? ILs 0:00.16 /sbin/init -- 2 ?? DL 0:00.02 (pagedaemon) 3 ?? DL 0:00.00 (vmdaemon) 4 ?? DL 0:00.02 (bufdaemon) 5 ?? DL 0:01.02 (syncer) 1056 ?? Is 0:00.00 adjkerntz -i 1187 ?? Ss 0:00.08 syslogd -s 1206 ?? Is 0:00.05 inetd -wW 1208 ?? Is 0:00.11 cron 1622 ?? Ss 0:00.02 sendmail: accepting connections on port 25 (sendmail) 1621 v0 Ss 0:00.12 -CSh (csh) 1701 v0 R+ 0:00.00 ps -ax 1699 v1 Is+ 0:00.01 /usr/libexec/getty Pc ttyv1 1619 v2 Is+ 0:00.01 /usr/libexec/getty Pc ttyv2 1618 v3 Is+ 0:00.01 /usr/libexec/getty Pc ttyv3 1617 v4 Is+ 0:00.01 /usr/libexec/getty Pc ttyv4 1616 v5 Is+ 0:00.01 /usr/libexec/getty Pc ttyv5