




已阅读5页,还剩76页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验一 实验名称Linux 安装实验实验目的在微机上安装Linux操作系统,后续的实验都将在此环境上进行。通过实验,要求:1. 了解Linux对硬件资源的要求;2. 学会安装Linux系统;3. 学会启动、关闭Linux系统。实验时间3学时实验内容1. 了解Linux对硬件的最低要求 CPU:INTEL 386或以上型号 总线结构:ISA、EISA、VESA或PCI等 内存:8MB以上 硬盘容量:2GB以上2. 安装步骤 如果BIOS支持光盘启动,则插入Linux安装盘,重新启动计算机。 或者准备启动软盘(Red Hat只要一张,SlackWare需要boot disk和rootdisk)。插入启动盘,重新启动计算机。 对硬盘分区,留出交换空间和文件系统的空间。 按提示分阶段装入系统。1)用LINUX启动光盘启动计算机2)选择安装语言、鼠标、键盘等3)选择安装类型(服务器、工作站、自定、升级)4)为磁盘划分LINUX分区与SWAP分区5)选择引导装载程序与记录引导程序的位置6)依次配置网络、防火墙、语言及时区7)配置帐号与密码8)选择合适的软件包9)进行图形界面配置10)安装软件包11)创建引导盘12)进行X窗口设置13)安装完成。 配置系统。实验报告总结安装过程,完成实验报告。实验报告包括:1. 硬件资源环境、Linux系统版本。2. 安装过程描述。3. 安装结果。4. 问题分析。思考题1. 可以通过几种途径安装Linux操作系统?2. 有几种方法启动Linux操作系统实验二实验名称Linux操作系统使用实验时间6学时实验目的1. 熟练使用Linux字符界面、窗口系统的常用命令。2. 熟练运用Linux的在线求助系统实验内容(一)Linux操作基础1.新建立一个用户,用此用户名和口令登陆系统.注意屏幕上列出的提示信息.解答 1)useradd student 2)passwd 123452.查看系统的命令提示符,确定系统使用的SHELL 程序类型. 列出unix系统常见的SHELL种类解答 1)echo $SHELL2)sh bash tcsh csh pdksh zsh ash mc等3.用who 命令 来查看当前登陆在系统中的用户列表解答who4.利用who 命令的选项来查看系统中的用户总数和系统启动时间解答1)who q2) who -b5.查找系统中的帮助系统工具,比较 learn, help, man三个命令的异同解答 1)learn 无learn命令 只有unix系统有2)help info bash3) man 是手册manual的缩写6.用date 命令查看当前的日期和时间解答date7.用cal 命令查看2003年1月1日是星期几解答cal my 1 20038.查看2000年的日历表解答cal y 20039.新建立一个student 用户,用passwd命令修改口令.解答同题110.试图用一个不满足口令组成要求的字符串作为新口令.将系统显示的错误信息记录下来.解答 错误口令分两种 一种是类字典的单词,另外一种是非法字符(二)vi编辑器1.列出Linux/UNIX系统支持的编辑器类型解答 Kwrite, vi, Emace , Mozilla Composer, Edit, hexedit等2.列出VI编辑器的两种工作模式并简述特点.解答 编辑模式(文本的输入与修改)与命令模式(输入各种命令)3.用vi生成一个名为test文件,输入两到三行文字.解答 1)vi test2)输入文字3)wq4.对上述的test文件进行增删改的操作.解答1)增加 i命令2)删除 dd命令3) 修改 x命令5.在VI中,列出用户当前目录下的文件.解答 :!ls6.创建一个用户名的缩写,并把它加到用户文件的头部解答 vi fileenter a line of filesisort7.读入日期和时间,并将它们放到文件中用户名之后解答 在命令行输入:r!date8.创建一个garden文件.并把test文件追加到它的尾部.解答 在命令行输入 :r!cat test9.试改变VI编辑器的showmode选项解答 set showmode set noshowmode10.试在文档中搜索指定的字串.解答 在命令行输入 /string11.用什么命令设置与取消行号功能?解答在命令行内输入 set nu! 显示与取消行号(三)Linux文件系统(一)1.显示当前目录解答echo $PWD2.改变到用户主目录解答cd 3.列出当前目录的内容解答ls4.确认用户主目录解答echo $HOME5.当前目录下,创建名为ABC的新目录解答mkdir ABC6.在ABC目录创建名为ABC的新文件,输入若干文字解答vi abc7.显示当前目录内容1)按照字母逆序 ls -r2)按照长格式 ls -l3)按照水平格式 ls -format=horizontal4)显示不可见的文件 ls d .*8.在屏幕上显示文件ABC的内容解答cat ABC9.删除ABC目录下的ABC文件.删除ABC文件前,要求确认解答rm -i ABC/ABC10.删除当前目录中的ABC目录解答rm ABC11.显示当前默认打印机的状态解答lpc status12.列出所有文件,包括不可见的文件解答 ls a或者 ls -al13.打印文档的多份副本的命令是什么?解答lp n(四)Linux文件系统(二)1.在用户主目录下创建名为memos的目录解答1)cd /返回用户主目录2)mkdir memos/建立memos目录2.用vi编辑器,在用户主目录中创建名为myfile的文件解答1)vi myfile/建立myfile文件2)ESC-:wq /存盘退出3.用cat命令,把myfile多次附加到新创建的名为large的文件中.解答一个三次附加的例子Cat myfilelarge X34.用pr命令及其选项,格式化large文件并打印解答 pr largelarge.print6.用cp命令把用户主目录下的所有文件复制到目录memos下解答cp * ./memos7.用ln命令创建large的另一个文件名解答ln large large.old8.用mv命令,把large更名为large.old解答mv large large.old9.用mv命令,把large移到memos下解答mv large memos10.显示一个文件的后五行解答tail n 5 large11.显示一个文件的前五行解答head n 5 large12.把一个文件的最后30个字符存到另一个文件中解答tail c 30 largemyfile13.保存用户主目录中所有7天前创建的文件列表解答1)cd.2)find ./-ctime 7 name “*” 7days14.查找名为passwd的文件解答find ./-name “passwd”15.查找名为profile的文件解答 find ./name 16.从用户主目录开始,查找所有7天前创建的文件解答 find $home atime 7 17.查找所有多于10天的文件,保存到另一个目录中解答 find ./ -ctime +10 name “*” exec cp ./backup/;18.用paste命令,将两个文件连在一起解答 paste large1 myfilemyfile19.用more命令读大文件.解答 more file实验报告1. 列出任意六个常用命令的格式和参数。2. 给出查询所有sh命令的帮助命令格式。3. 实验结果。4. 问题分析。思考题1. 你在Linux操作系统上尝试安装使用过什么软件?2. 如果忘记某个命令的用法,怎么办?实验三实验名称Linux下C语言编程实验目的1 学习使用Linux/UNIX shell 程序设计语言;2 学习使用Linux/UNIX的系统调用。实验时间3学时实验内容1Linux下C语言程序的调试过程 a、在用户主目录下用vi编辑C语言源程序(源程序已附后),如:$vi hello.c。 b、用gcc编译C语言源程序:$gcc ./hello.c -o example 这里gcc是Linux下的C语言程序编译器,./hello.c表示待编译的源文件是当前工作目录下的hello.c,-o example表示编译后产生的目标代码文件名为example。 c、若编译不正确,则进入vi修改源程序,否则,运行目标代码:$./example 注意: a、如果用户shell的环境变量设置得当,可省略“./”。 b、这只是gcc最最基本的用法。 2调试下面c语言程序,并在实验报告中说明该程序的功能。i nclude main() int n,a200,carry,temp,i,j,digit = 1; printf(Please input n:); scanf(%d,&n);a0 = 1; for( i = 2; i = n; +i) for( j = 1, carry = 0; j =1; -i) printf(%d,ai-1); printf(n); 3 编写shell程序(1) 编写一shell程序:编辑一个C语言程序,然后对该语言进行编译,最后执行这个程序。要求C语言程序的名称不预先确定。(2) 编写一shell程序:测试某文件是否存在且可读,若存在且可读则在屏幕上显示,然后删除;否则在屏幕上输出NO FIND THE FILE THIS HOUR!4 命令解释程序(1)目的 :通过本实验熟悉UNIX或Linux操作系统及C语言。熟悉系统调用的编程能力,程序中允许使用库函数。(2)内容:利用C语言编写一个微型命令解释程序,接受并解释以下命令: dir 列当前目录 cop 文件1 文件2 拷贝文件 era文件名 删除文件 dis字符串 显示字符串 end 结束,退出(3)要求: 进行命令合法性检查,若不合法,显示出错信息,等待重新输入; 命令前后有空格为合法命令。(4)思路:下面各题均有编程思路,目的是给大家一些提示、借鉴。同学们可不必拘泥与此,根据自己的理解和想法去编程。 用静态数组或二维数组形式定义命令保留字表和shell命令字表。静态数组形式如下:static char * cst =dirend;static char * scwt =ls lexit; 输入命令字gets(string); 分离命令字strcspn( );strncpy( ) 比较命令字strcmp( ); 执行shell命令system( );(5)、举例DOS下定义:char cwt =ls,cp,rm,echo,endLinux下定义:char scwt =ls,cp,rm,echo,endchar coml30,comp30,bak30,0gets(string)puts(string)strcmp(string1,string2)strcpy(string1,string2)strcat(string1,string2)执行:shell system()(6)、命令解释程序模拟算法流程图示例1)简单的数据结构命令保留字表CST1dir2cop3era4dis5endShell命令字表SCWT 1ls -l2cp3rm -f4echo5 (空格)2) 主控模拟流程图示例实验报告完成以上实验内容并写出实验报告,报告应具有以下内容:1 实验目的。2 实验内容。3 程序(含注释)、实验结果、及运行情况分析。4 实验过程中出现的问题及解决方法。5 实验体会。6程序源程序。实验四实验名称:认识进程实验目的:1. 学习进程的基本概念,理解进程的基本属性2. 掌握进程操作的主要命令3. 掌握通过/proc文件系统获取进程信息4. 理解Linux系统的进程树实验时间3学时预备知识:1. 有关进程的主要命令:1.1 ps:查看系统运行进程ps常用选项:选项说明x选择进程而不控制ttysa选择终端上的所有进程w提供详细的宽范围输出u显示面向用户的格式f以进程树格式列出进程ps运行结果的各字段含义:字段说明UID用户IDPID进程IDPPID父进程IDTTY控制终端的编号PRI优先级编号(编号越低,分配给此进程的计算机时间越多)NI(nice)影响动态优先级调整STAT当前的进程状态TIME使用的计算机时间COMMAND命令的名称进程状态(STAT)可为以下状态之一:状态代码说明R(可运行)可运行的进程S(休眠)正在等待外部事件的进程(如数据到达)。D(不可中断的休眠)类似“S”(此时不能终止此进程)T(已跟踪或已停止)进程已被暂停X 进程已死Z(僵进程)进程已自行终止,但尚未请求其返回值。1.2 pstree:以树结构显示进程列表pstree常用选项:选项说明-p显示进程PID-u显示用户ID1.3 top: 实时显示正在运行的进程top运行结果的各字段含义:字段说明PID进程IDUSER用户名PR优先级NINice值VIRT虚拟映象(单位为KB)RES驻留大小(单位为KB)SHR共享内存大小(单位为KB)S进程状态%CPUCPU使用率%MEM内存使用率(RES)TIMECPU时间COMMMAND命令名称/行top常用命令:字段说明?帮助h帮助r 将一个新的 nice 值分配给运行中的进程k 向某个运行中的进程发送终止信号(与 kill 或 killall相同)N 按进程 ID 排序P 按 CPU 负载排序1.4 nice和renicenice:为进程指派静态优先级E.g. $nice n +5 sleep 99renice:更改运行进程的nice值E.g. $renice 5 1012注意: 1.调度程序使用nice级别来确定为运行的进程提供服务的频率。 2.nice的范围:-2020;nice值越低,进城优先级越高。 3.nice默认为10。4.只有root用户可以负的nice值启动进程;只有root用户可以降低运行进程的nice值。1.5 前台与后台进程$command & 以后台方式启动进程fg 将进程切花到前台bg 将进程切换到后台运行jobs 列出作业控制的内容ctrl+Z 挂起进程1.6 kill和killall 向进程发送信号kill 用PID向进程发送信号E.g. $kill SIGTERM 1703killall 用进程的命令名称向进程发送信号常用信号:编号名称说明1SIGHUP重装载配置文件2SIGINT通过键盘(Ctrl+C)中断9SIGKILL停止进程。15SIGTERM立即结束进程(以受控的方法终止进程,因此可以进行清理)18SIGCONT继续由STOP停止的进程19STOP停止进程注意:kill l 或man 7 signal可获取信号的完整列表。2. 利用/proc文件系统查看进程信息系统中运行的每个进程在/proc目录下有个目录,目录名称为进程PID。/proc/$PID/下包含进程的详细信息:文件说明cmdline进程的命令行environ进程的环境信息fd目录为每个打开的文件描述符提供一个入口mem 可通过其访问进程的内存映像stat包含进程的大多数信息status 包含用户可读的进程信息cwd指向进程的当前工作目录exe指向正在被执行的文件maps内存映射区信息root进程的根目录statm进程对内存的使用情况实验要求: 1. 列出你的系统中当前运行的所有进程,并解释bash进程的各项信息的含义(不包括RSS和SHR)。2. 分别从至少三个虚拟终端登录,以树状形式列出你的系统中当前运行的所有进程及其PID。找出你当前运行进程的所有祖先进程,并说明其各自的作用。分析Linux系统中的进程的家族关系。3. 试验有几种方法可以列出系统中的所有运行进程?4. 执行下列命令和操作:$sleep180Z$jobs$sleep 240&$sleep 300&$sleep 330&$sleep 630&$jobs$fg 4C$bg 1$kill 5解释命令的作用和执行结果。5. 分别以root和普通用户身份运行一个进程,使用nice、renice和top设置或者改变其优先级,并验证是否成功。6. 利用/proc文件系统,选择一个进程,如-bash,列出并解释/proc/$PID/cmdline, /proc/$PID/stat, /proc/$PID/status文件的内容。实验报告:实验名称:实验日期:实验设备号:实验目的:实验步骤:(完成实验要求的工作,需列出执行命令和执行结果,并有相关分析和解释。)认识和体会:实验五实验名称:进程管理实验目的:1. 进一步学习进程的属性2. 学习进程管理的系统调用3. 掌握使用系统调用获取进程的属性、创建进程、实现进程控制等4. 掌握进程管理的基本原理实验时间6学时预备知识:1. 进程属性1.1 getpid(取得进程ID) 表头文件 #include定义函数 pid_t getpid(void);函数说明 getpid()用来取得目前进程的进程ID,许多程序利用取到的此值来建立临时文件,以避免临时文件相同带来的问题。 返回值 目前进程的进程ID 范例1.2 getppid(取得父进程的进程ID) 表头文件 #include定义函数 pid_t getppid(void);函数说明 getppid()用来取得目前进程的父进程ID。返回值 目前进程的父进程ID。1.3 getegid(取得有效的组ID) 表头文件 #include#include定义函数 gid_t getegid(void);函数说明 getegid()用来取得执行目前进程有效组ID。有效的组ID用来决定进程执行时组的权限。返回值返回有效的组ID。1.4 geteuid(取得有效的用户ID) 表头文件 #include#include定义函数 uid_t geteuid(void)函数说明 geteuid()用来取得执行目前进程有效的用户ID。有效的用户ID用来决定进程执行的权限,借由此改变此值,进程可以获得额外的权限。倘若执行文件的setID位已被设置,该文件执行时,其进程的euid值便会设成该文件所有者的uid。返回值 返回有效的用户ID。1.5 getgid(取得真实的组ID) 表头文件 #include#include定义函数 gid_t getgid(void);函数说明 getgid()用来取得执行目前进程的组ID。返回值 返回组ID1.6 getuid(取得真实的用户ID) 表头文件 #include#include定义函数 uid_t getuid(void);函数说明 getuid()用来取得执行目前进程的用户ID。返回值 用户ID1.7 times (取得进程相关的时间) 表头文件 #include定义函数 clock_t times(struct tms *buf);函数说明 取得进程运行相关的时间。参数说明 /*sys/times.h*/struct tmsclock_t tms_utime;/*进程花在执行用户模式代码上的时间*/clock_t tms_stime;/*进程花在执行内核代码上的时间*/clock_t tms_cutime;/*子进程花在执行用户模式代码上的时间*/clock_t tms_cstime;/*子进程花在执行内核代码上的时间*/返回值 自系统自举后经过的时钟嘀嗒数。注意 时钟嘀嗒数time转换为用户可读的方式,即多少秒,需通过如下方式:(float)time/sysconf(_SC_CLK_TCK);2. 进程创建2.1 system(执行shell 命令) 表头文件 #include定义函数 int system(const char * string);函数说明 system()会调用fork()产生子进程,由子进程来调用/bin/sh -c string来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程。 返回值 如果system()在调用/bin/sh时失败则返回127,其他失败原因返回-1。若参数string为空指针(NULL),则返回非零值。2.2 fork(建立一个新的进程) 表头文件 #include定义函数 pid_t fork(void);函数说明 fork()会产生一个新的子进程,其子进程会复制父进程的数据与堆栈空间,并继承父进程的用户代码,组代码,环境变量、已打开的文件代码、工作目录和资源限制等。Linux 使用copy-on-write(COW)技术,只有当其中一进程试图修改欲复制的空间时才会做真正的复制动作,由于这些继承的信息是复制而来,并非指相同的内存空间,因此子进程对这些变量的修改和父进程并不会同步。此外,子进程不会继承父进程的文件锁定和未处理的信号。注意 Linux不保证子进程会比父进程先执行或晚执行,因此编写程序时要留意死锁或竞争条件的发生。 返回值 如果fork()成功则在父进程会返回新建立的子进程代码(PID),而在新建立的子进程中则返回0。如果fork 失败则直接返回-1,失败原因存于errno中。错误代码 EAGAIN 内存不足。ENOMEM 内存不足,无法配置核心所需的数据结构空间。exec函数簇表头文件 #include2.3.1 execl(执行文件) 定义函数 int execl(const char * path,const char * arg,.);函数说明 execl()用来执行参数path字符串所代表的文件路径,接下来的参数代表执行该文件时传递过去的argv(0)、argv1,最后一个参数必须用空指针(NULL)作结束。返回值 如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno中。范例 #includemain()execl(“/bin/ls”,”ls”,”-al”,”/etc/passwd”,(char * )0);2.3.2 execlp(从PATH 环境变量中查找文件并执行) 定义函数 int execlp(const char * file,const char * arg,);函数说明 execlp()会从PATH 环境变量所指的目录中查找符合参数file的文件名,找到后便执行该文件,然后将第二个以后的参数当做该文件的argv0、argv1,最后一个参数必须用空指针(NULL)作结束。返回值 如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno 中。错误代码 参考execve()。范例 /* 执行ls -al /etc/passwd execlp()会依PATH 变量中的/bin找到/bin/ls */#includemain()execlp(“ls”,”ls”,”-al”,”/etc/passwd”,(char *)0);2.3.3 execv(执行文件) 定义函数 int execv (const char * path, char * const argv );函数说明 execv()用来执行参数path字符串所代表的文件路径,与execl()不同的地方在于execve()只需两个参数,第二个参数利用数组指针来传递给执行文件。返回值 如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno 中。范例 /* 执行/bin/ls -al /etc/passwd */#includemain()char * argv =“ls”,”-al”,”/etc/passwd”,(char*) 0;execv(“/bin/ls”,argv);2.3.4 execve(执行文件) 定义函数 int execve(const char * filename,char * const argv ,char * const envp );函数说明 execve()用来执行参数filename字符串所代表的文件路径,第二个参数系利用数组指针来传递给执行文件,最后一个参数则为传递给执行文件的新环境变量数组。返回值 如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno 中。错误代码 EACCES1. 欲执行的文件不具有用户可执行的权限。2. 欲执行的文件所属的文件系统是以noexec 方式挂上。3.欲执行的文件或script翻译器非一般文件。EPERM1.进程处于被追踪模式,执行者并不具有root权限,欲执行的文件具有SUID 或SGID 位。2.欲执行的文件所属的文件系统是以nosuid方式挂上,欲执行的文件具有SUID 或SGID 位元,但执行者并不具有root权限。E2BIG 参数数组过大ENOEXEC 无法判断欲执行文件的执行文件格式,有可能是格式错误或无法在此平台执行。EFAULT 参数filename所指的字符串地址超出可存取空间范围。ENAMETOOLONG 参数filename所指的字符串太长。ENOENT 参数filename字符串所指定的文件不存在。ENOMEM 核心内存不足ENOTDIR 参数filename字符串所包含的目录路径并非有效目录EACCES 参数filename字符串所包含的目录路径无法存取,权限不足ELOOP 过多的符号连接ETXTBUSY 欲执行的文件已被其他进程打开而且正把数据写入该文件中EIO I/O 存取错误ENFILE 已达到系统所允许的打开文件总数。EMFILE 已达到系统所允许单一进程所能打开的文件总数。EINVAL 欲执行文件的ELF执行格式不只一个PT_INTERP节区EISDIR ELF翻译器为一目录ELIBBAD ELF翻译器有问题。范例 #includemain()char * argv =“ls”,”-al”,”/etc/passwd”,(char *)0;char * envp =“PATH=/bin”,0execve(“/bin/ls”,argv,envp);2.3.5 execvp(执行文件) 定义函数 int execvp(const char *file ,char * const argv );函数说明 execvp()会从PATH 环境变量所指的目录中查找符合参数file 的文件名,找到后便执行该文件,然后将第二个参数argv传给该欲执行的文件。返回值 如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno中。范例 /*请与execlp()范例对照*/#includemain()char * argv = “ls”,”-al”,”/etc/passwd”,0;execvp(“ls”,argv);3. 进程等待3.1 wait(等待子进程中断或结束) 表头文件 #include#include定义函数 pid_t wait (int * status);函数说明 wait()会暂时停止目前进程的执行,直到有信号来到或子进程结束。如果在调用wait()时子进程已经结束,则wait()会立即返回子进程结束状态值。子进程的结束状态值会由参数status 返回,而子进程的进程ID也会一快返回。如果不在意结束状态值,则参数 status可以设成NULL。子进程的结束状态值请参考waitpid()。返回值 如果执行成功则返回子进程ID(PID),如果有错误发生则返回-1。失败原因存于errno中。附加说明 范例 #include#include#include#includemain()pid_t pid;int status,i;if(fork()= =0)printf(“This is the child process .pid =%dn”,getpid();exit(5);elsesleep(1);printf(“This is the parent process ,wait for child.n”;pid=wait(&status);i=WEXITSTATUS(status);printf(“childs pid =%d .exit status=dn”,pid,i);3.2 waitpid(等待子进程中断或结束) 表头文件 #include#include定义函数 pid_t waitpid(pid_t pid,int * status,int options);函数说明 waitpid()会暂时停止目前进程的执行,直到有信号来到或子进程结束。如果在调用wait()时子进程已经结束,则wait()会立即返回子进程结束状态值。子进程的结束状态值会由参数status返回,而子进程的进程ID也会一快返回。如果不在意结束状态值,则参数status可以设成NULL。参数pid为欲等待的子进程ID,其他数值意义如下:pid0 等待任何子进程ID为pid的子进程。参数option可以为0 或下面的OR 组合:WNOHANG 如果没有任何已经结束的子进程则马上返回,不予以等待。WUNTRACED 如果子进程进入暂停执行情况则马上返回,但结束状态不予以理会。子进程的结束状态返回后存于status,底下有几个宏可判别结束情况WIFEXITED(status)如果子进程正常结束则为非0值。WEXITSTATUS(status)取得子进程exit()返回的结束代码,一般会先用WIFEXITED 来判断是否正常结束才能使用此宏。WIFSIGNALED(status)如果子进程是因为信号而结束则此宏值为真WTERMSIG(status)取得子进程因信号而中止的信号代码,一般会先用WIFSIGNALED 来判断后才使用此宏。WIFSTOPPED(status)如果子进程处于暂停执行情况则此宏值为真。一般只有使用WUNTRACED 时才会有此情况。WSTOPSIG(status)取得引发子进程暂停的信号代码,一般会先用WIFSTOPPED 来判断后才使用此宏。返回值 如果执行成功则返回子进程ID(PID),如果有错误发生则返回-1。失败原因存于errno中。4. 信号4.1 kill(传送信号给指定的进程) 表头文件 #include#include定义函数 int kill(pid_t pid,int sig);函数说明 kill()可以用来送参数sig指定的信号给参数pid指定的进程。参数pid有几种情况:pid0 将信号传给进程ID为pid 的进程。pid=0 将信号传给和目前进程相同进程组的所有进程pid=-1 将信号广播传送给系统内所有的进程pid0 将信号传给进程组ID为pid绝对值的所有进程返回值 执行成功则返回0,如果有错误则返回-1。错误代码 EINVAL 参数sig 不合法ESRCH 参数pid 所指定的进程或进程组不存在EPERM 权限不够无法传送信号给指定进程范例 #include#include#include#includemain()pid_t pid;int status;if(!(pid= fork()printf(“Hi I am child process!n”);sleep(10);return;elseprintf(“send signal to child process (%d) n”,pid);sleep(1);kill(pid ,SIGABRT);wait(&status);if(WIFSIGNALED(status)printf(“chile process receive signal %dn”,WTERMSIG(status);4.2 signal(设置信号处理方式) 表头文件 #include定义函数 void (*signal(int signum,void(* handler)(int);函数说明 signal()会依参数signum 指定的信号编号来设置该信号的处理函数。当指定的信号到达时就会跳转到参数handler指定的函数执行。如果参数handler不是函数指针,则必须是下列两个常数之一:SIG_IGN 忽略参数signum指定的信号。SIG_DFL 将参数signum 指定的信号重设为核心预设的信号处理方式。返回值 返回先前的信号处理函数指针,如果有错误则返回SIG_ERR(-1)。附加说明 在信号发生跳转到自定的handler处理函数执行后,系统会自动将此处理函数换回原来系统预设的处理方式,如果要改变此操作请改用sigaction()。5. 进程调度5.1 getpriority(取得程序进程执行优先权) 表头文件 #include#include定义函数 int getpriority(int which,int who);函数说明 getpriority()可用来取得进程、进程组和用户的进程执行优先权。参数 which有三种数值,参数who 则依which值有不同定义which who 代表的意义PRIO_PROCESS who 为进程IDPRIO_PGRP who 为进程的组IDPRIO_USER who 为用户ID此函数返回的数值介于-20 至20之间,代表进程执行优先权,数值越低代表有较高的优先次序,执行会较频繁。返回值 返回进程执行优先权,如有错误发生返回值则为-1 且错误原因存于errno。附加说明 由于返回值有可能是-1,因此要同时检查errno是否存有错误原因。最好在调用次函数前先清除errno变量。错误代码 ESRCH 参数which或who 可能有错,而找不到符合的进程。EINVAL 参数which 值错误。5.2 setpriority(设置程序进程执行优先权) 表头文件 #include#include定义函数 int setpriority(int which,int who, int prio);函数说明 setpriority()可用来设置进程、进程组和用户的进程执行优先权。参数which有三种数值,参数who 则依which值有不同定义参数prio介于-20 至20 之间。代表进程执行优先权,数值越低代表有较高的优先次序,执行会较频繁。此优先权默认是0,而只有超级用户(root)允许降低此值。返回值 执行成功则返回0,如果有错误发生返回值则为-1,错误原因存于errno。ESRCH 参数which或who 可能有错,而找不到符合的进程EINVAL 参数which值错误。EPERM 权限不够,无法完成设置EACCES 一般用户无法降低优先权5.3 nice(改变进程优先顺序) 表头文件 #include定义函数 int nice(int inc);函数说明 nice()用来改变进程的进程执行优先顺序。参数inc数值越大则优先顺序排在越后面,即表示进程执行会越慢。只有超级用户才能使用负的inc 值,代表优先顺序排在前面,进程执行会较快。返回值 如果执行成功则返回0,否则返回-1,失败原因存于errno中。错误代码 EPERM 一般用户企图转用负的参数inc值改变进程优先顺序。6. 其他6.1 atexit(设置程序正常结束前调用的函数) 表头文件 #include定义函数 int atexit (void (*function)(void);函数说明 atexit()用来设置一个程序正常结束前调用的函数。当程序通过调用exit()或从main中返回时,参数function所指定的函数会先被调用,然后才真正由exit()结束程序。返回值 如果执行成功则返回0,否则返回-1,失败原因存于errno中。范例 #includevoid my_exit(void)printf(“before exit () !n”);main()atexit (my_exit);exit(0);6.2 exit(正常结束进程) 表头文件 #include定义函
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年广东省深圳市南山区深圳湾学校中考数学三模试卷(含答案)
- 南阳招教试题及答案
- 计算机软考试题及答案
- 儿童喜欢的题目及答案
- 批复安全培训中心课件
- 医院医保工作管理工作计划
- 2025年杭州物理高考试卷及答案
- 2025年医院行政干事考试题及答案
- 2025年语文诗词考试题型及答案
- 2025年北京二建考试试题及答案
- 2025-2026学年湘美版(2024)小学美术三年级上册《创意钟表》教学设计
- 2025交通行业工会改革计划
- 2022民用建筑暖通空调设计技术措施
- 高校新生开学动员大会教师代表发言稿范文
- 技术研发项目进度报告及问题反馈表
- 2025年心内科重症病房CCU临床带教资选拔理论试题(附答案)
- 秦兵马俑的课件教学
- 边境电子围栏2025年行业应用前景报告中小企业安全市场拓展
- 【英语】江苏省苏锡常镇2025届高三下学期二模试题(解析版)
- 2024年德州禹城市事业单位引进青年人才真题
- DBJT15-110-2015 广东省建筑防火及消防设施检测技术规程
评论
0/150
提交评论