)和退出键
(通常是控制-反斜线),他们被用于中断当前运行进程。另一种产生信号的方法是
调用名为k
ill的函数。在一个进程中调用此函数就可向另一个进程发送一个信号。当然这样
做也有些
限制:为了向一个进程发送信号,我们必需是该进程的属主。
实例
回忆一下基本shell程式(程式15)。假如我们调用此程式,然后键入中断键,则
执行此程
序的进程终止。产生这种后果的原因是:对于此信号(SIGINT)的系统默认动作是终
止此进程
。该进程没有告诉系统核对此信号作何处理,所以系统按默认方式终止该进程。
为了更改此程式使其能捕获到该信号,他需要调用signal函数,指定当产生SIGIN
T信号时要
调用的函数名。我们为此编写了名为sig[CD#*2]int的函数,当其被调用时,他只
是打印一
条消息,然后打印一个新提示符。在程式15中加了12行构成了程式18(添加的
12行以行
首的 号指示)。
程式18〓从标准输入读命令并执行他们
因为大多数重要的应用程式都将使用信号,所以在第十章,我们将周详说明信号机
构。
110〓Unix时间值
长期以来,Unix系统一直使用两种不同的时间值。
1日历时间。是自197011,00:00:00以来,国际标准时(UTC)所经过的秒数
累计值(
较早的手册称UTC为格林威冶平时)。这些时间值可用于记录文档最近一次的修改时
间等。
2进程时间。这也被称为CPU时间,用以度量进程使用的中央处理机资源。进程时
间以时钟
滴答计算,多年来,每秒钟取为50,60或100个滴答。系统基本数据类型clock[CD
#*2]t保持
这种时间值。另外,POSIX定义常数CLK[CD#*2]TCK,用其说明每秒滴答数。(常数
CLK〖CD#*
2〗TCK现在已不再使用。我们将在254节说明如何用sysconf函数得到每秒时钟
滴答数。
)
当度量一个进程的执行时间时(见39节),Unix系统使用三个进程时间值。
·时钟时间
·用户CPU时间
·系统CPU时间
时间又称为墙上时钟时间。他是进程运行的时间总量,其值在和系统中同时运行的
其他进程
数有关。无论何时,在我们报告时钟时间时,都是在系统中没有其他活动时进行度
量的。
用户CPU时间是执行用户指令所用的时间量。系统CPU时间是为该进程执行系统核所
经历的时
间。例如,只要一个进程执行一个系统服务,例如read或write,则在系统核内执
行该服务
所花费的时间就计入该进程的系统CPU时间。用户CPU时间和系统CPU时间的和常被
称为CPU时
间。
要取得任一进程的时钟时间、用户时间和系统时间是容易的〖CD2〗只要执行命令
time(1),
其参数是我们要度量其执行时间的命令,例如:
$ cd/usr/include
$ time grep[CD#*2]POSIX[CD#*2]SOURCE */*h>/dev/null
real 0m19:81s
user 0m043s
sys 0m453s
time命令的输出格式和所使用的shell有关。
在815节中,我们将说明一个运行进程如何取得这三个时间。关于时间,日期的
一般说明
见69节。
111〓系统调用和库函数
任何操作系统都提供多种服务的入口点,由此程式向系统核请求服务。各种版本的
Unix都提
供经良好定义的有限数目的入口点,经过这些入口点进入系统核,这些入口点被称
之为系统
调用(system call),系统调用是我们不能更改的一种Unix特征。Unix版本7提供了
约50个系
统调用,43 BSD提供了约110个,而SVR4则提供了约120个。
系统调用界面总是在Unix程式员手册的第二部分中说明。其定义也包括在C语言中
。这和很
多较早期的操作系统是不同的,这些系统按传统都在机器的汇编语言中定义系统核
入口点。
Unix所使用的技术是为每条系统调用在标准C库中配置一个具备同样名字的函数。
用户进程
用标准C调用序列来调用这些函数,然后,函数用系统所需要的技术调用相应的系
统核服务
。例如函数可将一个或几个C参数送入通用寄存器,然后执行某个产生软中断进入
系统核的
机器指令。从应用角度考虑,我们可将系统调用视作为C函数。
Unix程式员手册的第三部分定义了程式员能够使用的通用函数。虽然这些函数可能
会调用一
个或几个系统核的系统调用,但是他们并不是系统核的入口点。例如,printf函数
会调用wr
ite系统调用以进行输出操作,但函数strcpy(复制一字符串)和atoi(变换ASCII为
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




