【marlin固件 源码】【PHP棋盘源码】【浩森源码】getty源码分析
1.Linux中tty、码分pty和pts概念及区别
2.谁有FreeBSD的码分使用手册啊?
3.deepin切换root用户教程
4.Linux进程和线程的基础与管理
Linux中tty、pty和pts概念及区别
深入探索Linux中的码分tty、pty和pts:交互世界的码分核心</ 在Linux的世界里,终端设备是码分交互的核心,它们各自扮演着独特的码分marlin固件 源码角色。让我们来逐一揭开tty、码分pty和pts的码分神秘面纱,理解它们之间的码分微妙差异。1. tty:终端的码分灵魂
tty,源自电传打字机时代的码分创新,是码分字符设备的代名词,它代表了最基础的码分交互接口。例如,码分在串行端口连接的码分/dev/ttySn,如/dev/ttyS1,就是我们与系统直接对话的窗口。</2. pty:虚拟世界的桥梁
pty,即伪终端,是远程访问主机的关键组件,如telnet中的纽带。它在master-slave结构中运作,如/dev/pty/m3与/dev/pty/s3,为远程用户提供了无缝的交互体验。3. pts与ptmx:实现pty的逻辑
pts/ptmx是pty实现的巧妙设计,ptmx作为master端,其对应的是pts系列的slave端,如telnet连接到的/dev/pts/3,背后是GETTY程序在监听。命名规则的变迁
从传统到Unix,pty的命名方式有所演变。旧的RedHat系统采用ttys8和ptys8,而在Unix风格中,如/dev/ptm3与/dev/pts/3,它们是自动创建的,体现了Linux的兼容与进步。实战探索
试着在X环境开启多个终端,观察/dev/pt*的变化。你会发现,当终端关闭后,这些设备的动态关系依然清晰可见,如在RHEL4中,dev/ptmx与/dev/pts/1的master-slave关系。终端控制与管理
/dev/tty:不仅是进程控制终端,查看ps –ax,还通过tty命令揭示设备的真面目。
/dev/ttyn, /dev/console:虚拟控制台,如tty1-6,其中tty0是系统消息的入口,只有root权限才能写入。
/dev/pts/n:在X Windows环境中的伪终端,模拟了真实的终端体验。
FAQ:终端设备的常见误解
区分tty、ttyS*和pty*:tty涵盖虚拟控制台、串口和伪终端,PHP棋盘源码而ttyS*专指串行终端,pty*则代表逻辑终端,如X终端模拟。</
/dev/tty0与/dev/fb*:在Framebuffer未启用系统,tty0负责显卡访问,而在其他情况下,它们的区别就显得尤为重要。
终端与控制台:内核文档“TERMINAL DEVICES”以及《Linux内核源代码情景分析》和《Operating Systems》等书籍详细解释了它们的异同,值得深入研究。
谁有FreeBSD的使用手册啊?
.4 拨入服务
Contributed by Guy Helmer. Additions by Sean Kelly.
为拨入服务配置FreeBSD系统与连接到终端是非常相似的,除非您正在使用 modem来拨号而不是终端。
.4.1 外置vs.内置modem
外置modem看起来很容易拨号。 因为,外置 modem 可以通过储存在非易失性的RAM中的参数来配置,它们通常提供指示器来显示重要的RS-信号的状态。不停闪光的信号灯能给用户留下比较深刻的印象,而且指示器也可以用来查看modem是否正常地工作。
内置modem通常缺乏非易失性的RAM, 所以对它们的配置可能会限制在通过 DIP 开关来设置。如果您的内置modem有指示灯,您也很难看得到。
.4.1.1 Modem和线缆
如果您使用一个外置的 modem,那您将需要适当的电缆线。一个标准的串口线应当足够长以至普通的信号能够连接上:
表 -4. 信号名称
缩写 全名
RD 收到数据 (Received Data)
TD 传出数据 (Transmitted Data)
DTR 数据终端就绪 (Data Terminal Ready)
DSR 数据集就绪 (Data Set Ready)
DCD 数据载波检测 (Data Carrier Detect) (RS- 的收到线路信号检测器)
SG 信号地 (Signal Ground)
RTS 要求发送数据 (Request to Send)
CTS 允许对方发送数据 (Clear to Send)
FreeBSD 对速度超过 bps 的情形需要通过 RTS 和 CTS 信号来完成流控制, 通过 CD 信号来检测呼叫响应和挂机,并通过 DTR 信号来在会话结束时对调制解调器进行复位。某些电缆在连接时没有提供全部需要的信号, 这会给您带来问题, 例如在挂断时登录会话不消失,这就有可能是电缆的问题。
与其它类 UNIX? 操作系统类似, FreeBSD 使用硬件信号来检测呼叫响应, 以及在挂断时挂断并复位调制解调器。 FreeBSD 避免发送命令给调制解调器, 或监视其状态。 如果您熟悉通过调制解调器来连接基于 PC 的 BBS 系统, 这可能看起来有点难用。
.4.2 串口的考虑
FreeBSD支持基于 NS, NS, NS 和 NSA 的EIA RS-C通讯接口。 和设备有单字符缓冲。 设备提供了一个 个字符的缓冲,可以提高更多的系统性能。 因为单字符缓冲设备比 个字符的缓冲需要更多的系统资源来工作,所以基于A的接口卡可能更好。 如果系统没有活动的串口, 或有较大的负载, 字符缓冲的卡对于低错误率的通讯来说更好。
.4.3 快速预览
对于终端, init 会在每个配置串口上为每个拨入连接产生一个 getty 进程。 例如, 如果一个 modem 被附带在 /dev/ttyd0 中,用命令ps ax可以显示下面这些:
? I 0:. /usr/libexec/getty V ttyd0
当用户拨上modem, 并使用它进行连接时,浩森源码 CD 线就会被 modem 认出。 内核注意到载波信号已经被检测到, 需要完成 getty 端口的打开。 getty 发送一个登录:在指定的初始线速度上的命令行。 Getty 会检查合法的字符是否被接收,在典型的配置中, 如果发现 “垃圾”, getty 就会设法调节线速度,直到它接收到合理的字符。
用户在键入他/她的登录名称后, getty执行/usr/bin/login, 这会要求用户输入密码来完成登录,然后启动用户的shell。
.4.4 配置文件
如果希望允许拨入您的 FreeBSD 系统, 在 /etc 目录中有三个系统配置文件需要您关注。 其一是 /etc/gettytab,其中包含用于 /usr/libexec/getty 服务的配置信息。 其二是 /etc/ttys, 它的作用是告诉 /sbin/init 哪些 tty 设备上应该运行 getty。 最后,关于端口的初始化命令, 应放到 /etc/rc.d/serial 脚本中。
关于在 UNIX 上配置拨入调制解调器有两种主要的流派。一种是将本地计算机到调制解调器的 RS- 接口配置为固定速率。 这样做的好处是,远程用户总能立即见到系统的登录提示符, 而其缺点则是,系统并不知道用户真实的数据速率是多少, 因而, 类似 Emacs 这样的程序, 也就无法调整它们绘制屏幕的方式, 以便为慢速连接改善响应时间。
另一种流派将调制解调器的 RS- 接口速率配置为随远程用户的连接速率变化。 例如, 对 V.bis (.4 Kbps) 连接, 调制解调器会让自己的 RS- 接口以 .2 Kbps 的速率运行, 而 bps 连接, 则会使调制解调器的 RS- 接口以 bps 的速率运行。 由于 getty 并不能识别具体的调制解调器的连接速率反馈信息, 因此, getty 会以初始速度给出一个 login: 提示, 并检查用户的响应字符。如果用户看到乱码, 则他们应知道此时应按下 Enter 键,直到看到可以辨认的提示符为止。 如果数据速率不匹配, 则 getty 会将用户输入的任何信息均视为 “乱码”, 并尝试以下一种速率来再次给出 login: 提示符。 这一过程可能需要令人作呕地重复下去, 不过一般而言,用户只要敲一两下键盘就能看到正确的提示符了。 显然, 这种登录过程看起来不如前面所介绍的 “锁定速率” 方法那样简单明了, 但使用低速连接的javatoken登录源码用户,却可以在运行全屏幕程序时得到更好的交互响应。
这一节将尽可能公平地介绍关于配置的信息,但更着力于介绍调制解调器速率随连接速率变化的配置方法。
.4.4.1 /etc/gettytab
/etc/gettytab是一个用来配置 getty 信息的 termcap 风格的文件。 请看看 gettytab 的联机手册了解完整的文件格式和功能列表。
.4.4.1.1 锁定速度的配置
如果您把您的modem的数据通讯率锁定在一个特殊的速度上, 您不需要对 /etc/gettytab 文件作任何变化。
.4.4.1.2 匹配速度的配置
您将需要在 /etc/gettytab 中设置一个记录来告诉 getty 您希望在 modem 上使用的速度。 如果您的 modem 的速率是 bit/s, 则可以使用现有的 D 的记录。
#
# Fast dialup terminals, // rotary (can start either way)
#
D|d|Fast-Dial-:\
:nx=D:tc=-baud:
3|D|Fast-Dial-:\
:nx=D:tc=-baud:
5|D|Fast-Dial-:\
:nx=D:tc=-baud:
如果您有一个更高速度的 modem, 必须在 /etc/gettytab 中添加一个记录。 下面是一个让您可以以最高 .2 Kbit/s 的用在 .4 Kbit/s的modem上的接口记录:
#
# Additions for a V.bis Modem
#
um|V|High Speed Modem at ,8-bit:\
:nx=V:tc=std.:
un|V|High Speed Modem at ,8-bit:\
:nx=V:tc=std.:
uo|V|High Speed Modem at ,8-bit:\
:nx=V:tc=std.:
up|V|High Speed Modem at ,8-bit:\
:nx=V:tc=std.:
uq|V|High Speed Modem at ,8-bit:\
:nx=V:tc=std.:
这样做的结果是 8-数据位, 没有奇偶校验的连接。
上面使用.2 Kbit/s的连接速度的例子,也可以使用 bit/s (for V.), bit/s, bit/s, bit/s, 直到 .2 Kbit/s。 通讯率的调节使用 nx= (“next table”) 来实现。 每条线使用一个 tc= (“table continuation”) 的记录来加速对于一个特殊传输率的标准设置。
如果您有.8 Kbit/s的modem,或您想使用它的 .4Kbit/s 模式,就需要使用一个更高的超过 .2 Kbit/s 的通讯速度的 modem。 这是一个启动 .6 Kbit/s 的 gettytab 记录的例子:
#
# Additions for a V.bis or V. Modem
# Starting at .6 Kbps
#
vm|VH|Very High Speed Modem at ,8-bit:\
:nx=VH:tc=std.:
vn|VH|Very High Speed Modem at ,8-bit:\
:nx=VH:tc=std.:
vo|VH|Very High Speed Modem at ,8-bit:\
:nx=VH:tc=std.:
vp|VH|Very High Speed Modem at ,8-bit:\
:nx=VH:tc=std.:
vq|VH|Very High Speed Modem at ,8-bit:\
:nx=VH:tc=std.:
如果您的 CPU 速度较低, 或系统的负荷很重, 而且没有 A 的串口,您可能会在.6 Kbit/s 上得到 “sio” “silo”错误。
.4.4.2 /etc/ttys
/etc/ttys文件的配置在 例 -1中介绍过。 配置 modem 是相似的, 但我们必须指定一个不同的终端类型。锁定速度和匹配速度配置的通用格式是:
ttyd0 "/usr/libexec/getty xxx" dialup on
上面的第一条是这个记录的设备特定文件 —— ttyd0 表示 /dev/ttyd0 是这个 getty 将被监视的文件。 第二条 "/usr/libexec/getty xxx" 是将运行在设备上的进程 init。 第三条,dialup,是默认的终端类型。 第四个参数, on, 指出了线路是可操作的 init。也可能会有第五个参数, secure, 但它将只被用作拥有物理安全的终端 (如系统终端)。
默认的终端类型可能依赖于本地参考。 拨号是传统的默认终端类型,以至用户可以定制它们的登录脚本来注意终端什么时候拨号, 和自动调节它们的终端类型。 然而,作者发现它很容易在它的站点上指定 vt 作为默认的终端类型,因为用户刚才在它们的远程系统上使用的是VT模拟器。
您对/etc/ttys作修改之后,您可以发送 init 进程给一个 HUP 信号来重读文件。您可以使用下面的命令来发送信号:
# kill -HUP 1
如果这是您的第一次设置系统, 您可能要在发信号 init 之前等一下,strcpy 函数源码等到您的 modem 正确地配置并连接好。
.4.4.2.1 锁定速度的配置
对于一个锁定速度的配置,您的 ttys 记录必须有一个为 getty 提供固定速度的记录。 对于一个速度被锁定在 .2kbit/s 的 modem, ttys 记录是这样的:
ttyd0 "/usr/libexec/getty std." dialup on
如果您的 modem 被锁定在一个不同的数据速度, 为 std.speed 使用适当的速度来代替 std.。 确信您使用了一个在 /etc/gettytab 中列出的正确的类型。
.4.4.2.2 匹配速度的设置
在一个匹配速度的设置中,您的 ttys 录需要参考在 /etc/gettytab 适当的起始 “auto-baud” 记录。 例如, 如果您为一个以 .2 Kbit/s 开始的可匹配速度的 modem 添加上面建议的记录, 您的 ttys 记录可能是这样的:
ttyd0 "/usr/libexec/getty V" dialup on
.4.4.3 /etc/rc.d/serial
高速调制解调器, 如使用 V.、 V.bis, 以及 V. 的那些, 需要使用硬件 (RTS/CTS) 流控制。 您可以在 /etc/rc.d/serial 中增加 stty 命令来在 FreeBSD 内核中, 为调制解调器设置硬件流控制标志。
例如, 在 1 号串口 (COM2) 拨入和拨出设备上配置 termios 标志 crtscts, 可以通过在 /etc/rc.d/serial 增加下面的设置来实现:
# Serial port initial configuration
stty -f /dev/ttyd1.init crtscts
stty -f /dev/cuad1.init crtscts
.4.5 Modem 设置
如果您有一个 modem, 它的参数能被存储在非易失性的 RAM 中,您将必须使用一个终端程序来设置参数 (比如 MS-DOS? 下的 Telix 或者 FreeBSD 下的 tip)。使用同样的通讯速度来连接 modem 作为初始速度 getty 将使用和配置 modem 的非易失性 RAM 来适应这些要求:
连接时宣告 CD
操作时宣告 DTR; DTR 消失时挂断线路并复位调制解调器
CTS 传输数据流控制
禁用 XON/XOFF 流控制
RTS 接收数据流控制
宁静模式 (无返回码)
无命令回显
请阅读您 modem 的文档找到您需要用什么命令和 DIP 接口设置。
例如,要在一个 U.S. Robotics? Sportster? 的外置 modem 上设置上面的参数,可以用下面这些命令:
ATZ
AT&C1&D2&H1&I0&R2&W
您也可能想要在 modem 上寻找机会调节这个设置, 例如它是否使用 V.bis 和 MNP5 压缩。
外置 modem 也有一些用来设置的 DIP 开关, 也许您可以使用这些设置作为一个例子:
Switch 1: UP —— DTR Normal
Switch 2: N/A (Verbal Result Codes/Numeric Result Codes)
Switch 3: UP —— Suppress Result Codes
Switch 4: DOWN —— No echo, offline commands
Switch 5: UP —— Auto Answer
Switch 6: UP —— Carrier Detect Normal
Switch 7: UP —— Load NVRAM Defaults
Switch 8: N/A (Smart Mode/Dumb Mode)
在拨号 modem 上的结果代码应该被 禁用/抑制, 以避免当 getty 在 modem 处于命令模式并回显输入时错误地给出 login: 提示时可能造成的问题。 这样可能导致 getty 与 modem 之间产生更长的不必要交互。
.4.5.1 锁定速度的配置
对于锁定速度的配置, 您需要配置 modem 来获得一个不依赖于通讯率的稳定的 modem到计算机 的传输率。 在一个 U.S. Robotics Sportster 外置 modem 上, 这些命令将锁定 modem 到计算机的传输率:
ATZ
AT&B1&W
.4.5.2 匹配速度的配置
对于一个变速的配置, 您需要配置 modem 调节它的串口传输率匹配接收的传输率。 在一个 U.S. Robotics Sportster 的外置 modem 上, 这些命令将锁定 modem 的错误修正传输率适合命令要求的速度,但允许串口速度适应没有纠错的连接:
ATZ
AT&B2&W
.4.5.3 检查modem的配置
大多数高速的modem提供了用来查看当前操作参数的命令。 在USR Sportster 外置modem上, 命令 ATI5 显示了存储在非易失性RAM中的设置。要看看正确的 modem 操作参数, 可以使用命令 ATZ 然后是 ATI4。
如果您有一个不同牌子的 modem, 检查 modem 的使用手册看看如何双重检查您的 modem 的配置参数。
.4.6 问题解答
这儿是几个检查拨号modem的步骤。
.4.6.1 检查FreeBSD系统
把您的modem连接到FreeBSD系统, 启动系统, 然后, 如果您的 modem 有一个指示灯,当登录时看看 modem 的 DTR 指示灯是否亮: 会在系统控制台出现命令行——如果它亮, 意味着 FreeBSD 已经在适当的通讯端口启动了一个 getty 进程, 等待 modem 接收一个呼叫。
如果DTR指示灯不亮, 通过控制台登录到 FreeBSD系统,然后执行一个 ps ax 命令来看 FreeBSD 是否正在正确的端口运行 getty进程。您将在进程显示中看到像这样的一行:
? I 0:. /usr/libexec/getty V ttyd0
? I 0:. /usr/libexec/getty V ttyd1
如果您看到是这样的:
d0 I 0:. /usr/libexec/getty V ttyd0
modem 不接收呼叫, 这意味着 getty 已经在通讯端口打开了。这可以指出线缆有问题或 modem 错误配置, 因为 getty 无法打开通讯端口。
如果您没有看到任何 getty 进程等待打开想要的 ttydN 端口, 在 /etc/ttys 中双击您的记录看看那儿是否有错误。 另外,检查日志文件 /var/log/messages 看看是否有一些来自 init 或 getty 的问题日志。 如果有任何信息, 仔细检查配置文件 /etc/ttys 和 /etc/gettytab,还有相应的设备文件 /dev/ttydN,是否有错误,丢失记录,或丢失了设备指定文件。
.4.6.2 尝试接入Try Dialing In
设法拨入系统。 确信使用8位, 没有奇偶检验, 在远程系统上的1阻止位。如果您不能立刻得到一个命令行, 试试每隔一秒按一下 Enter。如果您仍没有看到一个登录: 设法发送一个 BREAK。如果您正使用一个高速的 modem 来拨号, 请在锁定拨号 modem 的接口速度后再试试。
如果您不能得到一个登录:prompt,再检查一下 /etc/gettytab,重复检查:
在/etc/ttys 中指定的初始可用的名称与 /etc/gettytab 的一个可用的相匹配。
每个 nx= 记录与另一个 gettytab 可用名称匹配。
每个 tc= 记录与另一个 gettytab可用名称相匹配。
如果您拨号但 FreeBSD 系统上的 modem 没有回应, 确信 modem 能回应电话。 如果 modem 看起来配置正确了, 通过检查 modem 的指示灯来确认 DTR 线连接正确。
如果您做了好几次,它仍然无法工作,打断一会,等会再试试。 如果还不能工作,也许您应该发一封电子邮件给 FreeBSD 一般问题邮件列表 寻求帮助。
deepin切换root用户教程
deepin系统上开启root并切换root用户登陆,方法如下1首先要设置root的密码,打开终端输入以下命令sudo passwd root 给root账号设置密码 2密码设置后,然后输入下面命令cd etclightdm sudo gedit lightdmconf 在最。
系统用户管理给root社密码或sudo passwd root然后 点属性权限,把所有的勾打上 注销就可以用root登录图形界面了。
首先,从Android智能机获取ROOT权限开始下载并安装好腾讯手机管家PC版之后,打开该软件并进入工具箱,选择“一键ROOT”按钮后,应用工具将智能匹配手机系统,寻找最适合该手机的ROOT方案,几分钟之后,用户手机即可成功获得ROOT。
先注销出来然后按两次ctrl+alt+del,会出现一个登陆框,在用户名处输入administrator,然后回车就可以使用administraor用户了当然administrator用户有密码的话,也要输入密码才可进入。
额输入密码不会显示任何东西的,只是可能光标的闪动节奏有变化,而这个也不是一定的,正常的输入密码就行了。
终端输入 sudo passwd 输入你的用户密码后会让你输入二次root权限密码,然后用sudo su 检查下,一般这样就能获取root权限了安装方法1 先去下载自已的显卡型号下载最新驱动2把下载回来的run文件放在方便你记忆的。
第一种控制面板管理工具计算机管理本地用户和组打开Administrator属性,不要勾选“帐户已停用”,打开你刚新建的帐户属性,勾选“帐户已停用”注销切换用户 第二种控制面板用户帐户更改用户登录或注销的方式不。
program are described in theindividual files in usrsharedoc*copyrightDeepin GNULinux comes with ABSOLUTELY NO WARRANTY, to the extentpermitted by applicable lawroot@hadoop1~# lsroot@hadoop1~。
我也遇到过同样的问题,我解决了一共有两种方法如下第一种控制面板管理工具计算机管理本地用户和组打开Administrator属性,不要勾选“帐户已停用”,打开你刚新建的帐户属性,勾选“帐户已停用”注销切换用户。
设置自动登录,deepin启动项设定为0秒直接进入可以去下载了一个mingetty的新版,重新编译了源码,这个版本可以用参数,指定自动登录的用户然后可以把新编译的mingetty拷贝到sbin下命名为mingetty_auto,不破坏原来的。
深度内部也研发很多内置软件,例如深度录屏深度系统修复深度编辑器等等,有些软件还是比较好用的软件安装复杂度会首先影响用户体验感,在deepin操作系统中,最为主要的软件安装方式为应用商店安装以及deb安装包安装#。
输入su命令 然后输入当前用户密码,你就可以获取root权限。
重新获取 下载并安装好腾讯手机管家PC版之后,打开该软件并进入工具箱,你会发现“一键ROOT”和“KingRoot”两款工具通过USB 将手机同电脑连接后,无论选择那款工具,用户都可以通过简单的鼠标点击,完成之前难以达成的任务。
以上就是UOS系统进入开发者模式的教程,希望大家喜欢,请继续关注脚本之家。
安装步骤如下1打开EasyBcd添加新条目NeoGrub安装配置2点击配置按钮,在记事本里添加如下内容title Install Deepin root hd0,1kernel hd0,1vmlinuz boot=casper isoscanfilename=deepiniso r。
Linux进程和线程的基础与管理
一.进程的基本概念程序是为了完成某种任务而设计的软件,比如vi是程序。什么是进程呢? 进程就是运行中的程序。一个运行着程序,可能有多个进程。比如Web服务器是Apache服务器,当管理员启动服务后,可能会有好多人来访问,也就是说许多用户同时请求working)
#3 - full multiuser mode
#4 - unused
#5 - X
#6 - reboot (do not set initdefault to this)
#
//表示当前缺省运行级别为5,启动系统进入图形化界面
id:5:initdefault:
//启动时自动执行/etc/rc.d/rc.sysinit脚本
#system initialization.
si::sysinit:/etc/rc.d/rc.sysinit
:0:wait:/etc/rc.d/rc 0
:1:wait:/etc/rc.d/rc 1
:2:wait:/etc/rc.d/rc 2
:3:wait:/etc/rc.d/rc 3
:4:wait:/etc/rc.d/rc 4
//当运行级别为5时,以5为参数运行/etc/rc.d/rc脚本,init将等待其返回
:5:wait:/etc/rc.d/rc 5
:6:wait:/etc/rc.d/rc 6
//在启动过程中允许按[ctrl-alt-delete]重启系统
#trap ctrl-alt-delete
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
#
..................................
#
//在运行级别2、3、4、5以上ttyX为参数执行/sbin/mingetty程序,打开ttyX终端用于用户登录,如果进程退出则再次运行mingetty程序
#run gettys in standard runlevels
1::respawn:/sbin/mingetty tty1
2::respawn:/sbin/mingetty tty2
3::respawn:/sbin/mingetty tty3
4::respawn:/sbin/mingetty tty4
5::respawn:/sbin/mingetty tty5
6::respawn:/sbin/mingetty tty6
//在级别5上运行xdm程序,提供xdm图形方式登录界面,并在退出时重新执行
x:5:respawn:/etc/x/prefdm -nodaemon
#run xdm in runleverl 5
Inittab配置文件每行的基本格式如下。
id:runlevels:action:procees
其中某些部分可以为空,下面我们逐一介绍。
1.id
1~2个字符,配置行的惟一标识,在配置文件中不能重复。
2.runlevels
配置行适用的运行级别,在这里可填入多个运行级别,比如或者等。
Linux有7个运行级别:
0:关机
1:单用户字符界面
2:不具备网络文件系统(NFS)功能的多用户字符界面
3:具有网络功能的多用户字符界面
4:保留不用
5:具有网络功能的图形用户界面
6:重新启动系统
3.action
init有如下几种行为,如下表所示。
init行为
行为
描述
respawn
启动并监视第4项指定的process,若process终止则重启它
wait
执行第4项指定的process,并等待它执行完备
once
执行第4项指定的process
boot
不论在哪个执行等级,系统启动时都会运行第4项指定的process
bootwait
不论在哪个执行等级,系统启动时都会运行第4项指定的process,且一直等它执行完备
off
关闭任何动作,相当于忽略该配置行
ondemand
进入ondemand执行等级时,执行第4项指定的process
initdefault
系统启动后进入的执行等级,该行不需要指定process
sysinit
不论在哪个执行等级,系统会在执行boot及bootwait之前执行第4项指定的process
powerwait
当系统的供电不足时执行第4项指定的process,且一直等它执行完备
powerfailnow
当系统的供电严重不足时执行第4项指定的process
ctrlaltdel
当用户按下ctrl+alt+del 时执行的操作
kbrequest
当用户按下特殊的组合键时执行第4项指定的process,此组合键需在keymaps文件定义
4.process
Process为init执行的进程,这些进程都保存在目录/etc/rc.d/rcX中,其中的X代表运行级别,rc程序接收X参数,然后运行/etc/rc.d/rc.X下面的程序。使用如下命令可以查看/etc/rc.d目录内容。
复制代码
代码如下:
#ls –l /etc/rc.d/
total
drwxr-xr-x 2 root root 3/ : init.d
-rxwr-xr-x 1 root root -3- rc
drwxr-xr-x 2 root root 3/ : rc0.d
drwxr-xr-x 2 root root 3/ : rc1.d
drwxr-xr-x 2 root root 3/ : rc2.d
drwxr-xr-x 2 root root 3/ : rc3.d
drwxr-xr-x 2 root root 3/ : rc4.d
drwxr-xr-x 2 root root 3/ : rc5.d
drwxr-xr-x 2 root root 3/ : rc6.d
-rxwr-xr-x 1 root root -3- rc.local
-rxwr-xr-x 1 root root -3- rc.sysinit
…………
使用如下命令查看/etc/rc.d/rc5.d的内容。
复制代码
代码如下:
#ls –l /etc/rc.d/rc5.d
这些文件都是符号链接,以S打头的标识启动该程序,而以K打头的标识终止该程序,后面的数字标识执行顺序,越小越先执行,剩下的标识程序名。系统启动或者切换到该运行级别时会执行以S打头的程序,系统切换到该运行级别时会执行以K打头的程序。
这个目录下的程序可通过chkconfig程序进行管理,当然这个目录下的程序需要符合一定规范,如果了解shell编程,可以查看这些符号链接所指向的程序的源码。
init也是一个进程,和普通的进程具有一样的属性。比如修改了/etc/inittab,想让修改马上生效,可通过运行“kill-SIGHUP 1”来实现,也可通过运行“init q”来实现。
八.Linux的线程简介
1.Linux线程的定义
线程(thread)是在共享内存空间中并发的多道执行路径,它们共享一个进程的资源,如文件描述和信号处理。在两个普通进程(非线程)间进行切换时,内核准备从一个进程的上下文切换到另一个进程的上下文要花费很大的开销。这里上下文切换的主要任务是保存老进程CPU状态并加载新进程的保存状态,用新进程的内存映像替换进程的内存映像。线程允许你的进程在几个正在运行的任务之间进行切换,而不必执行前面提到的完整的上下文。另外本文介绍的线程是针对POSIX线程的,也就是Pthread。也因为Linux对它的支持最好,相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。在串行程序基础上引入线程和进程是为了提高程序的并发度,从而提高程序运行效率和响应时间。也可以将线程和轻量级进程(LWP)视为等同的,但其实在不同的系统/实现中有不同的解释,LWP更恰当的解释为一个虚拟CPU或内核的线程。它可以帮助用户态线程实现一些特殊的功能。Pthread是一种标准化模型,它用来把一个程序分成一组能够同时执行的任务。
2.什么场合使用Pthread,即线程
(1)在返回前阻塞的I/O任务能够使用一个线程处理I/O,同时继续执行其他处理任务。
(2)在有一个或多个任务受不确定性事件,比如网络通信的可获得性影响的场合,能够使用线程处理这些异步事件,同时继续执行正常的处理。
(3)如果某些程序功能比其他的功能更重要,可以使用线程以保证所有功能都出现,但那些时间密集型的功能具有更高的优先级。
以上三点可以归纳为:在检查程序中潜在的并行性时,也就是说在要找出能够同时执行任务时使用Pthread。上面已经介绍了,Linux进程模型提供了执行多个进程的能力,已经可以进行并行或并发编程,可是纯种能够让你对多个任务的控制程序更好、使用资源更少,因为一个单一的资源,如全局变量,可以由多个线程共享。而且,在拥有多个处理器的系统上,多线程应用会比用多个进程实现的应用执行速度更快。
3.Linux进程和线程的发展
年1月发布的Linux 2.2内核中,进程是通过系统调用fork创建的,新的进程是原来进程的子进程。需要说明的是,在2.2.x版本中,不存在真正意义上的线程(thread)。Linux中常用的线程Pthread实际上是通过进程来模拟的。也就是说Linux中的线程也是通过fork创建的,是“轻”进程。Linux 2.2只默认允许个进程/线程同时运行。高端系统同时要服务上千个用户,所以这显然是一个问题,它一度是阻碍Linux进入企业级市场的一大因素。
年1月发布的Linux 2.4内核消除了这个限制,并且允许在系统运行中动态调整进程数上限。因此,进程数现在只受制于物理内存的多少。在高端服务器上,即使安装了MB内存,现在也能轻而易举地同时支持1万6千个进程。
年月发布的2.6内核,进程调度经过重新编写,去掉了以前版本中效率不高的算法。以前,为了决定下一步要运行哪一个任务,进程调度程序要查看每一个准备好的任务,并且经过计算机来决定哪一个任务相对来更为重要。进程标识号(PID)的数目也从升到亿。内核内部的大改变之一就是Linux的线程框架被重写,以使NPTL(Native POSIX Thread Library)可以运行于其上。对于运行负荷繁重的线程应用的Pentium Pro及更先进的处理器而言,这是一个主要的性能提升,也是企业级应用中的很多高端系统一直以来所期待的。线程框架的改变包含Linux线程空间中的许多新的概念,包括线程组、线程各自的本地存储区、POSIX风格信号,以及其他改变。改进后的多线程和内存管理技术有助于更好地运行大型多媒体应用软件。
4.总结
线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。同时,线程适合于在对称处理器的计算机上运行,而进程则可以跨机器迁移。另外,进程可以拥有资源,线程共享进程拥有的资源。进程间的切换必须保存在进程控制块PCB(Process Control Block)中。同一个进程的多个线程间的切换不用那么麻烦。最后一个实例来作为本文的结束:当你在一台Linux PC上打开两个OICQ,每一个OICQ是一个进程;而当你在一个OICQ上和多人聊天时,每一个聊天窗口就是一个线程。