分时系统是指
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
分时系统是指,在一台主机上连接了多个带有显示器和键盘的终端,同时允许多个用户通过自己的终端,以交互方式使用计算机,共享
主机中的资源。
分时系统的产生
•人机交互
•共享主机
•便于用户上机
分时系统实现中的关键问题
•及时接收和及时处理。
–分时系统的特征
•多路性、独立性、及时性和交互性。
实时系统是指系统能及时响应外部事件的请求,在规定时间内完成
对该事件的处理,并控制所有实时任务协调一致地运行。
实时操作系统RTOS(realtime operation system): 是指能支持实
时控制系统工作的操作系统。
嵌入式操作系统:支持嵌入式系统工作的操作系统。
嵌入式系统一
般具有实时特点,这里把嵌入式操作系统和实时操作系统不加区别
对待。
需要有一个能描述程序的执行过程且能用来共享资源的基本单位。
这个基本单位被称为进程(或任务)
进程的定义:一个具有独立功能的程序对某个数据集在处理机上的
执行过程和分配资源的基本单位。
进程和程序的区别和关系可简述如下:
(1) 进程是一个动态概念,而程序则是一个静态概念。
程序是指令的有序集合,
没有任何执行的含义。
而进程则强调执行过程,它动态地被创建,并被调度执
行后消亡。
(2) 进程具有并行特征,而程序没有。
(3) 进程是竞争计算机系统资源的基本单位,从而其并行性受到系统自己的制约。
(4) 不同的进程可以包含同一程序,只要该程序所对应的数据集不同。
PCB 集中反映一个进程的动态特征。
在进程的生命期内,至少具有三种基本状态,它们是:执行状态、等待状态和
就绪状态。
所谓进程控制,就是系统使用一些具有特定功能的程序段来创建、撤消进程以
及完成进程各状态间的转换,从而达到多进程高效率并发执行和协调、实现资
源共享的目的
3.1文件相关命令
3.1.1创建文件夹(目录文件) mkdir
命令格式: mkdir 目录文件名
mkdir ExFile 在当前目录下创建名为ExFile的文件夹
3.1.2改变工作目录cd
命令格式: cd 目录路径
cd ExFile 进入ExFile目录
cd .. 表示回到上一层目录(父目录)
在每个文件目录下,有2个特殊的目录,当前目录可以用一个点.表示。
用2个点..表示上一级目录。
使用cd ..可以进入上一级目录。
3.1.3pwd: 会显示工作目录的绝对路径
命令格式: pwd
3.1.4显示目录内的文件和子目录列表 ls
命令格式: ls [参数] [目录或文件]
ls是英文单词list的简写,其功能为列出目录的内容。
这是用户最常用的一个命令之一,因为用户需要不时地查看某个目录的内容。
该命令类似于DOS下的dir命令。
命令中各选项的含义如下:
- a 显示指定目录下所有子目录与文件,包括隐藏文件。
- A 显示指定目录下所有子目录与文件,包括隐藏文件。
但不列出“.”和“..”。
- b 对文件名中的不可显示字符用八进制字符显示。
- c 按文件的修改时间排序。
- C 分成多列显示各项。
- d 如果参数是目录,只显示其名称而不显示其下的各文件。
往往与l 选项一起使用,以得到目录的详细信息。
- f 不排序。
- F 在目录名后面标记“/”,可执行文件后面标记“*”,符号链接后面标记“@”,管道(或FIFO)后面标记“|”,socket文件后面标记“=”。
- i 在输出的第一列显示文件的i节点号。
- l 以长格式来显示文件的详细信息。
这个选项最常用。
每行列出的信息依次是:文件类型与权限链接数文件属主文件属组文件大小建立或最近修改的时间名字
对于符号链接文件,显示的文件名之后有“—〉”和引用文件路径名。
对于设备文件,其“文件大小”字段显示主、次设备号,而不是文件大小。
目录中的总块数显示在长格式列表的开头,其中包含间接块。
- L 若指定的名称为一个符号链接文件,则显示链接所指向的文件。
- m 输出按字符流格式,文件跨页显示,以逗号分开。
- n 输出格式与l选项相同,只不过在输出中文件属主和属组是用相应的UID号和 GID号来表示,而不是实际的名称。
- o 与l选项相同,只是不显示拥有者信息。
- p 在目录后面加一个“/”。
- q 将文件名中的不可显示字符用“?”代替。
- r 按字母逆序或最早优先的顺序显示输出结果。
- R 递归式地显示指定目录的各个子目录中的文件。
- s 给出每个目录项所用的块数,包括间接块。
- t 显示时按修改时间(最近优先)而不是按名字排序。
若文件修改时间相同,则按字典顺序。
修改时间取决于是否使用了c或u选顶。
缺省的时间标记是最后一次修改时间。
- u 显示时按文件上次存取的时间(最近优先)而不是按名字排序。
即将-t的时间标记修改为最后一次访问的时间。
- x 按行显示出各排序项的信息。
用ls - l命令显示的信息中,开头是由10个字符构成的字符串,其中第一个字符表示文件类型,它可以是下述类型之一:
- 普通文件
d 目录
l 符号链接
b 块设备文件
c 字符设备文件
后面的9个字符表示文件的访问权限,分为3组,每组3位。
第一组表示文件属主的权限,第二组表示同组用户的权限,第三组表示其他用户的权限。
每一组的三个字符分别表示对文件的读、写和执行权限。
各权限如下所示:
r 读
w 写
x 执行。
对于目录,表示进入权限。
s 当文件被执行时,把该文件的UID或GID赋予执行进程的UID(用户ID)或GID(组 ID)。
t 设置标志位(留在内存,不被换出)。
如果该文件是目录,在该目录中的文件只能被超级用户、目录拥有者或文件属主删除。
如果它是可执行
文件,在该文件执行后,指向其正文段的指针仍留在内存。
这样再次执行
它时,系统就能更快地装入该文件。
3.1.5文件的创建与阅读 cat
命令格式: cat 文件名
创建一个文件 : cat > 文件名, 按下ctrl+c结束输入。
在一个文件后追加:cat >>文件名
显示文件内容 : cat 文件1 [ 文件2] [文件3]..
合并文件: cat 文件1 文件2 …. > 文件n
3.1.6删除文件 rm
命令格式: rm 文件名
rm 文件1 [文件2 文件3 …..]
rm -i 文件:删除文件前给与确认
rm –r 文件或目录:删除整个目录树。
如果删除目录内没有文件,可以使用rmdir命令。
3.1.7拷贝文件 cp
命令格式:cp 源文件[目录] 目标文件[目录]
cp -i 源文件目标文件:如果目标文件存在,覆盖目标文件时给出提示
cp -r 源目录名目标目录:复制目录树
3.1.8移动文件(目录)至新的目录、更该文件名(目录名) mv
命令格式: mv 源文件[目录] 目的文件[目录]
mv 源文件目的文件
如果目的文件不存在,源文件将改名为目的文件
如果目的文件存在,源文件将改名为目的文件,同时目的文件原有内容将被源文件覆盖
mv 源文件目的目录
如果目的目录中没有源文件,源文件将移动到目的目录
如果目的目录中已有与源文件同名的文件,目的目录中的文件将被覆盖,源文件移动到目的目录
3.1.9建立链接命令 ln
ln -s 源文件目标文件
创建一个符号链接文件,生成一个新的文件,该目标文件指向源文件,可以通过目标文件来使用源文件
ln 源目录目标文件
为目录创建一个符号链接文件,可以通过符号链接文件访问源目录
该命令在文件之间创建链接。
这种操作实际上是给系统中已有的某个文件指定另外一个可以用于访问它的名称。
对于这个新的文件名,我们可以
为之指定不同的访问权限,以控制对信息的共享和安全性的问题。
如果链
接指向目录,用户就可以利用该链接直接进入被链接的目录而不用打一大
堆的路径名。
而且,即使我们删除这个链接,也不会破坏原来的目录。
这
里带有-s参数时创建了一个新的文件。
在Linux中,文件的唯一标识是一个称为i节点的数。
它就像我们的身份证号,唯一标识一个人,但我们可以有几个名字,比如我们乳名和大名。
使用ls –i命令可以查看文件的i节点。
示例1: 用户/usr/include在当前目录下创建了一个符号链接lib,以便方便查看头文件。
ln - s /usr/include lib
3.1.10在磁盘中查找文件和目录的命令 find
命令格式:find 路径名搜索选项动作选项
搜索选项
-name : 通过文件名来查找文件
-type : 类型选项
-size : 通过文件大小来查找文件
-atime : 通过文件的最后访问日期来查找文件
-mtime: 通过文件的最后修改日期来查找文件
-newer: 查找比制定文件更新期更新的文件
动作选项
-print :输出找到的每个文件路径名(默认)
-exec command {} \; :对找到的文件执行command
-ok command {} \; :执行command前确认
示例1: 查找符合某种模式的文件
假定要显示当前目录及其子目录下所有以 da 开头的文件,请输入:find . –name ‘da*’
命令中的点 (.) 会使 find 搜索当前目录及其子目录。
文件名后的 -name 选项或文件名模式(在这种情况下为 da*)告知 find 搜索所有符合该模式的文件。
在本示例中,find 将搜索所有以 da 开头的文件名。
注意,da* 要用单引号括起来 ('da*')。
如果在 find 命令中使用文件名模式,必须用单引号将其括起来,以便 shell 可以对其进行正确地解释。
示例2: 查找晚于某个文件创建日期的文件
假定您想显示所有在某个文件创建日期之后修改过的文件。
要显示/home/weile 目录及其子目录下所有晚于 myfile 创建日期的文件,请输入:find /home/weile -newer myfile
本示例可以理解为:在目录 /home/weile 及其子目录下,查找所有在myfile 创建日期之后修改过的文件。
(要确定文件的上次修改日期,请使用ls -l 命令。
)
示例3:在文件中运行命令
可以在使用 find 命令查找到的文件中执行命令。
假定您想删除当前目录及其子目录下所有扩展名为 .tmp 的文件。
请输入:
find . –name ‘*.tmp’–exec rm { } \;
本示例查找当前目录及其子目录下所有扩展名为 .tmp 的文件,并将其显示在屏幕上,然后将其删除。
-exec 选项会导致以下命令 (rm) 的执行。
花括号 { } 代表使用 find 命令找到的文件。
结束 exec 字符串的分号之前应添加一个反斜线 (\;)。
注意反斜线 (\;)与{} 之间有空格。
3.1.11统计一个文件中的行数、字数或字符数 wc
命令格式:wc [参数]文件名
参数:
-w :统计字数
-l:统计行数
-c:统计字符数
示例1:/etc/passwd是用户信息文件,每一行表示一个用户。
使用wc命令可以统计出系统的用户总数。
请键入:
wc -l /etc/passwd
3.1.12输出重定向符 > 或 >>
命令格式:命令 > 文件名或命令 >> 文件名
示例1:ls > list , 将ls命令的结果保存到文件list中。
如果文件list不存在,则创建list;如果文件list已存在,原有内容将被覆盖。
这里ls本应该输出到屏幕上,现在输出到了文件list中。
示例2:ls >> list , 将ls命令的结果追加到到文件list后。
如果文件list不存在,则创建list;如果文件list已存在,则追加到文件list
后, 原有内容保留.
在命令模式下,键入
yy:将当前行复制到临时缓冲区
dd:删除当前行,并将其内容保存到临时缓冲区
ndd:删除多行,并将其内容保存到临时缓冲区,如3dd
p:将临时缓冲区内容复制到当前行的下一行
P:将临时缓冲区内容复制到当前行的上一行
u:取消上一次的修改
. :重复上一次的操作
3.1文本搜索
在命令模式下,键入:,出现:提示符后,键入/或?用来在文件中向前或向后搜索如: /Unix , ?linux (注意?与linux之间无空格)
搜索完毕后,在命令模式下键入n,会依次移动到下一个找到的文本上
3.2编辑多个文件
命令格式:vi file1 file file3 …..
首先编辑file1 , 在命令模式下,键入:n将编辑下一个文件,键入:ar将显示编辑文件列表,键入:N将编辑上一个文件。
3.3读入一个文件内容
命令格式: 在命令模式下,键入:r file
作用:将文件file的内容读入到光标所在行的下一行
3.4将文件的部分内容保存为另一个文件
命令格式:n1,n2 w file
示例:5,20 w t2.txt,将文件的第5行到第20行的内容保存到文件t2.txt中。
3.5使用缓冲区
vi中除了保存文件副本的临时缓冲区外,还有两类缓冲区:数字编号缓冲区和字母编号缓冲区,这两类缓冲区用来保存先前删除和复制的内容
3.15.1 数字缓冲区
数字编号缓冲区编号1-9,每次删除操作(dd,ndd)的文本都放入数字缓冲区
每次删除时,各个数字编号缓冲区内容依次下移,缓冲区1总是存放最新删除的文本
示例:―2p:将第2个缓冲区的内容复制到下一行
3.15.2 字母缓冲区
vi提供26个命名的缓冲区,用小写字母a-z表示,用来存放用户删除或复制的内容,用户需要指定缓冲区的名字去引用它们。
示例(命令行状态下):
―wdd:删除当前行,将副本保存在缓冲区w中
―wp:将缓冲区w的内容复制到当前行下一行
―ayy:将当前行的内容复制到缓冲区a中
3.6vi中运行shell命令
命令格式:!command
示例:!ls, !date
3.7将命令的执行结果加入vi中
示例:在命令模式下键入:r !ls ,将ls命令执行结果加入到vi中3.8设置vi的环境变量
命令:set [选项]
相关文件: .exrc 。
该文件用来保存vi中的设置选项,如用户主目录
有.exrc ,vi启动时根据此文件设置环境变量
示例:显示行号 set number
示例:不显示行号 set nonumber
◆ps命令
使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等
ps命令及其参数:
ps [选项]
常用的三个参数是选项u、a、x
u 选项来查看进程所有者及其他一些详细信息
a 显示终端上的所有进程,包括其他用户的进程。
x 显示没有控制终端的进程。
使用root用户登录,键入下面命令看到
[root@mmc ~]# ps au
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2241 0.0 0.1 3340 408 tty2 Ss+ Sep04 0:00 /sbin/mingetty tt root 2242 0.0 0.1 3400 404 tty3 Ss+ Sep04 0:00 /sbin/mingetty tt root 2243 0.0 0.1 3452 408 tty4 Ss+ Sep04 0:00 /sbin/mingetty tt root 2244 0.0 0.1 1468 408 tty5 Ss+ Sep04 0:00 /sbin/mingetty tt root 2245 0.0 0.1 2160 408 tty6 Ss+ Sep04 0:00 /sbin/mingetty tt root 8655 0.0 0.1 2292 356 tty1 Ss+ Oct05 0:00 /sbin/mingetty tt
root 26269 0.0 0.5 5352 1416 pts/0 Ss+ 19:46 0:00 -bash
root 26320 0.2 0.5 4272 1412 pts/2 Ss 20:06 0:00 -bash
root 26354 0.0 0.2 3020 764 pts/2 R+ 20:06 0:00 ps au
USER表示进程拥有者;PID表示进程标示符;%CPU表示占用的CPU 使用率;%MEM占用的物理内存使用率;VSZ表示占用的虚拟内存大小;
RSS为进程占用的物理内存值;TTY为终端的次要装置号码。
STAT表示进程的状态,其中D为不可中断的静止(I/O动作);R正在执行中;S静止状态;T暂停执行;Z不存在,但暂时无法消除;W没有足够的内存分页可分配;L有内存分页分配并锁在内存体内 (实时系统或 I/O)。
START为进程开始时间。
TIME为执行的时间。
COMMAND是所执行的指令。
top命令
top命令和ps命令的基本作用是相同的,显示系统当前的进程和其他
状况;但是top是一个动态显示过程,即可以通过用户按键来不断刷新当
前状态。
它将独占前台,直到用户终止该程序为止。
比较准确的说,top命令提供了实时的对系统处理器的状态监视。
它将显示系统中CPU最―敏感‖的任务列表。
该命令可以按CPU使用、内存使用
和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命
令或者在个人定制文件中进行设定。
在后面的介绍中将把命令参数和交互
命令分开讲述。
该命令的语法格式:
top [-] [d delay] [q] [c] [s] [S] [i]
d 指定每两次屏幕信息刷新之间的时间间隔。
当然用户可以使用s交互命令来改变之。
q 该选项将使top没有任何延迟的进行刷新。
如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
S 指定累计模式。
s 使top命令在安全模式中运行。
这将去除交互命令所带来的潜在危险。
i 使top不显示任何闲置或者僵死进程。
c 显示整个命令行而不只是显示命令名
top命令显示的项目很多,默认值是每5秒更新一次,当然这是可以设置的。
显示的各项目为:
uptime 该项显示的是系统启动时间、已经运行的时间和三个平均负载
值(最近1秒,5秒,15秒的负载值)。
processes 自最近一次刷新以来的运行进程总数。
当然这些进程被分为
正在运行的,休眠的,停止的等很多种类。
进程和状态显示可以通过交互
命令t来实现。
CPU states 显示用户模式,系统模式,优先级进程(只有优先级为负的列入考虑)和闲置等各种情况所占用CPU时间的百分比。
优先级进程所消
耗的时间也被列入到用户和系统的时间中,所以总的百分比将大于100%。
Mem 内存使用情况统计,其中包括总的可用内存,空闲内存,已用内存,共享内存和缓存所占内存的情况。
Swap 交换空间统计,其中包括总的交换空间,可用交换空间,已用交换空间。
PID 每个进程的ID。
PPID 每个进程的父进程ID。
UID 每个进程所有者的UID 。
USER 每个进程所有者的用户名。
PRI 每个进程的优先级别。
NI 该进程的优先级值。
SIZE 该进程的代码大小加上数据大小再加上堆栈空间大小的总数。
单
位是KB。
TSIZE 该进程的代码大小。
对于内核进程这是一个很奇怪的值。
DSIZE 数据和堆栈的大小。
TRS 文本驻留大小。
D 被标记为―不干净‖的页项目。
LIB 使用的库页的大小。
对于ELF进程没有作用。
RSS 该进程占用的物理内存的总数量,单位是KB。
SHARE 该进程使用共享内存的数量。
STAT 该进程的状态。
其中S代表休眠状态;D代表不可中断的休眠状态;R代表运行状态;Z代表僵死状态;T代表停止或跟踪状态。
TIME 该进程自启动以来所占用的总CPU时间。
如果进入的是累计模式,那么该时间还包括这个进程子进程所占用的时间。
且标题会变成CTIME。
%CPU 该进程自最近一次刷新以来所占用的CPU时间和总时间的百分比。
%MEM 该进程占用的物理内存占总内存的百分比。
COMMAND 该进程的命令名称,如果一行显示不下,则会进行截取。
内存中的进程会有一个完整的命令行。
下面介绍在top命令执行过程中可以使用的一些交互命令。
从使用角度来看,熟练的掌握这些命令比掌握选项还重要一些。
这些命令都是单字母的,如果在命令行选项中使用了s选项,则可能其中一些命令会被屏蔽掉。
Ctrl+L 擦除并且重写屏幕。
h或者? 显示帮助画面,给出一些简短的命令总结说明。
k 终止一个进程。
系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。
一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。
默认值是信号15。
在安全模式
中此命令被屏蔽。
i 忽略闲置和僵死进程。
这是一个开关式命令。
q 退出程序。
r 重新安排一个进程的优先级别。
系统提示用户输入需要改变的进程
PID以及要设置的优先级的数值。
第一次键入一个ID值,第二次键入要设
置的优先级的数值。
S 切换到累计模式。
s 改变两次刷新之间的延迟时间。
系统将提示用户输入新的时间,单位为s。
如果有小数,就换算成ms。
输入0值则系统将不断刷新,默认值是
5 s。
需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根
本来不及看清显示的情况,而且系统负载也会大大增加。
f或者F 从当前显示中添加或者删除项目。
o或者O 改变显示项目的顺序。
l 切换显示平均负载和启动时间信息。
m 切换显示内存信息。
t 切换显示进程和CPU状态信息。
c 切换显示命令名称和完整命令行。
M 根据驻留内存大小进行排序。
P 根据CPU使用百分比大小进行排序。
T 根据时间/累计时间进行排序。
W 将当前设置写入~/.toprc文件中。
这是写top配置文件的推荐方法。
从上面的介绍中可以看到,top命令是一个功能十分强大的监控系统的工具,尤其对于系统管理员而言更是如此。
一般的用户可能会觉得ps命令其实就够用了,但是top命令的强劲功能确实提供了不少方便。
下面来看
看实际使用的情况。
键入top命令查看系统状况
$ top
top - 21:11:22 up 73 days, 8:00, 2 users, load average: 0.00, 0.00, 0.00 Tasks: 53 total, 1 running, 52 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0% us, 50.0% sy, 0.0% ni, 0.0% id, 0.0% wa, 0.0% hi, 50.0% si Mem: 256060k total, 224292k used, 31768k free, 22988k buffers
Swap: 522104k total, 3316k used, 518788k free, 62392k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
26318 root 16 0 7956 2224 1800 S 55.0 0.9 0:07.94 sshd
26373 root 17 0 2752 936 760 R 27.5 0.4 0:07.68 top
1 root 16 0 2516 560 480 S 0.0 0.
2 0:04.22 init
2 root 34 19 0 0 0 S 0.0 0.0 0:03.04 ksoftirqd/0
3 root 5 - 10 0 0 0 S 0.0 0.0 6:31.83 events/0
第一行的项目依次为当前时间、系统启动时间、当前系统登录用户数目、平均负载。
第二行为进程情况,依次为进程总数、休眠进程数、运行进程
数、僵死进程数、终止进程数。
第三行为CPU状态,依次为用户占用、系统占用、优先进程占用、闲置进程占用。
第四行为内存状态,依次为平均
可用内存、已用内存、空闲内存、共享内存、缓存使用内存。
第五行为交
换状态,依次为平均可用交换容量、已用容量、闲置容量、高速缓存容量。
然后下面就是和ps相仿的各进程情况列表了。
3.1进程和程序的区别与联系
程序是静态概念,本身可以作为一种软件资源保存;而进程是程序的一次执行过程,是动态概念,它有一定的生命期,是动态地产生和
消亡的。
进程是一个能独立运行的单位,能与其他进程并发执行,进程是作为自愿申请和调度单位存在的;而通常的程序不能作为一个独立运行
的单位。
程序与进程无一一对应关系,一方面一个程序可由多个进程共用;另一方面一个进程只能对应一个程序。
进程和程序的关系犹如演出和
剧本的关系。
3.2fork系统调用
一个进程调用了fork以后,系统会创建一个子进程.这个子进程和父进程不同的地方只有他的进程ID和父进程ID,其他的都是一样。
当一个程序中调用fork函数后,内核会完成如下工作:
内核系统分配新的内存块和内核数据结构
复制原来的进程到新的进程
向运行进程集添加新的进程
将进程返回给两个进程
设原来的进程为父进程,调用fork生成的新进程为子进程,则子进程会执行父进程中fork函数后的代码。
fork系统调用使用格式:
头文件:#include <sys/types.h> /* 提供类型pid_t的定义 */
#include <unistd.h>
函数原形:pid_t fork(void);
返回值:pid_t
对于父进程,fork函数返回了子程序的进程号,而对于子程序,fork 函数则返回零,这样,对于程序,只要判断fork函数的返回值,就知道自己是处于父进程还是子进程中。
如果调用不成功,则返回-1。
3.3exec族函数
exec函数族的作用是根据指定的文件名找到可执行文件,并用它来取代调用进程的内容,换句话说,就是在调用进程内部执行一个可执行文件。
这里的可执行文件既可以是二进制文件,也可以是任何Linux下可执行的
脚本文件。
exec系统调用有六种不同的使用格式,但在核心中只对应一个调用入口。
它们有不同的调用格式和调用参数。
这六种调用格式分别为:
#include <unistd.h>
int execl (const char *path, const char *arg0, ..., const char*argn, (char *)0);
int execv (const char *path, char *const *argv);
int execle (const char *path, const char *arg0, ..., const
char*argn,(char *0), const char *envp[]);
int execve (const char *path, char *const *argv, char *const *envp);
int execlp (const char *file, const char *arg0, ..., const char*argn, (char *)0);
int execvp (const char *file, char *const *argv);
说明:参数path指出一个可执行目标文件的路径名;参数file指出可执行目标文件的文件名。
arg0作为约定同path一样指出目标文件的路径名;参数arg1到argn分别是该目标文件执行时所带的命令行参数;参数argv是一个字符串指针数组,由它指出该目标程序使用的命令行参数表,按约定第一个字符指针指向与path或file相同的字符串;最后一个指针指向一个空字符串,其余的指向该程序执行时所带的命令行参数;参数envp同argv一样也是一个字符指针数组,由它指出该目标程序执行时的进程环境,它也以一个空指针结束。
exec的六种格式在以下三点上有所不同:
path是一个目标文件的完整路径名,而file是目标文件名,它是可以通过环境变量PATH来搜索的;
由path或file指定的目标文件的命令行参数是完整的参数列表或是通过一指针数组argv来给出的;
环境变量是系统自动传递或者通过envp来给出的。
下图说明了exec系统调用的六种不同格式对以上三点的支持。
系统调用参数形式环境传送路径搜索
Execl 全部列表自动否
Execv 指针数组自动否
Execle 全部列表不自动否
Execve 指针数组不自动否
Execlp 全部列表自动是
Execvp 指针数组自动是。