1、 4.1 Linux下进程概述4.1.1 进程的概念1进程的引入2进程及其特征(1)动态性(2)并发性(3)独立性(4)异步性(5)结构特征:进程由程序、数据和进程控制块三部分组成 3进程与程序的关系 程序是指令的有序集合,其本身没有任何运行的含义,是一个静态的概念。而进程是程序在处理机上的一次执行过程,它是一个动态的概念。程序可以作为一种软件资料长期存在,而进程是有一定生命期的。程序是永久的,进程是暂时的。4.1.2 进程的结构(1)进程状态(2)调度信息(3)标识符(4)内部进程通信信息(5)链接信息 (6)时间和计时器(7)文件系统(8)虚拟内存信息(9)处理器信息 4.2 Linux进
2、程控制编程4.2.1 进程的创建方法:调用系统调用 fork 系统调用的语法格式:pid=fork();4.2.2 进程的等待 pid_t wait(int*stat_loc);pid_t waitpid(pid_t pid,int*stat_loc,int options);wait系统调用会使父进程阻塞直到一个子进程结束。如果没有父进程,没有子进程或者其子进程已经结束,wait会立即返回。成功时wait将返回子进程的ID,否则返回-1,并设置全局变量errno.stat_loc是子进程的退出状态。4.2.3 进程的终止核心为系统调用exit完成下列操作:(1)撤销所有的信号量(2)释放其所
3、有的资源,包括存储空间、已打开文件、工作目录、信号处理表等。(3)把进程状态置为“终止态”(4)向其父进程发送子进程终止的信号。(5)执行相应的进程调度。4.2.4 进程映像的更换核心为系统调用exec完成下列操作:(1)验证文件的可执行性,即用户有权执行它。(2)读文件头,检查它是一个可装入模块。(3)释放原有的内存空间。(4)按照可执行文件的要求分配新的内存空间,并装入内存。4.3 Linux守护进程 守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进程。Linux的大多数服务器就是用守护进程实现的
4、。4.3.1 守护进程及其特性 守护进程最重要的特性是后台运行。在这一点上DOS下的常驻内存程序TSR与之相似。守护进程必须与其运行前的环境隔离开来。4.3.2 守护进程的编程要点(1)在后台运行。(2)脱离控制终端、登录会话和进程组 (3)禁止进程重新打开控制终端 (4)关闭打开的文件描述符 (5)改变当前工作目录 (6)重设文件创建掩模 (7)处理SIGCHLD信号 4.4 Linux内核简介 Linux 内核的主要用途就是为了与计算机硬件进行交互,实现对硬件部件的编程控制和接口操作,调度对硬件资源的访问,并为计算机上的用户程序提供一个高级的执行环境和对硬件的虚拟接口。Linux 内核主要
5、由5 个模块构成,它们分别是:进程调度模块、内存管理模块、文件系统模块、进程间通信模块和网络接口模块。4.5 shell基本工作原理及编程 Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口。它是用户和Linux内核之间的接口程序。shell是一个命令语言解释器,类似于DOS下的程序,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用。shell有很多种,如:csh,tcsh,pdksh,ash,sash,zsh,bash等。Linux的缺省shell为bash(Bourne Again shell)。用户如何知道安装的Linux版本支持哪些sh
6、ell?在提示符下输入:cat /etc/shells 如果用户想知道自己现在使用的是哪种shell,可以在提示符后输入:echo$SHELL 4.5.1 shell的基本工作原理(1)读取用户由键盘输入的命令行。(2)分析命令,以命令名作为文件名,并将其它参数改造为系统调用execve()内部处理所要求的形式。(3)终端进程调用fork()建立一个子进程。(4)终端进程本身用系统调用wait4()来等待子进程完成(如果是后台命令,则不等待)。(5)如果命令末尾有&号(后台命令符号),则终端进程不用系统调用wait4()等待,立即发提示符,让用户输入下一个命令,转。如果命令末尾没有&号,则终端
7、进程要一直等待,当子进程(即运行命令的进程)完成处理后终止,向父进程(终端进程)报告,此时终端进程醒来,在做必要的判别等工作后,终端进程发提示符,让用户输入新的命令,重复上述处理过程。4.5.2 创建和执行shell脚本1创建shell脚本 shell脚本是使用用户环境shell提供的语句所编写的命令文件。用户可以用任何编辑器来编写shell脚本。因为shell脚本是解释执行的,所以不需要编译成目标文件。2执行shell脚本执行shell脚本的方式基本上有三种:(1)输入定向到shell脚本利用输入重定向,使shell命令解释程序的输入取自指定的文件。一般形式是:$bash 脚本名例如:$ba
8、sh。(7)TERM 用户终端的类型。4位置参数 位置参数是一种在调用shell程序的命令行中按照各自的位置决定的变量,是在程序名之后输入的参数。位置参数之间用空格分隔,shell取第一个位置参数替换程序文件中的$1,第二个替换$2,依次类推。$0是一个特殊的变量,它的内容是当前这个shell程序的文件名,所以,$0不是一个位置参数,在显示当前所有的位置参数时是不包括$0的。4.5.4 shell的特性1通配符和命令补齐功能通配符(wildcards)是转义字符的子集,下表给出了通配符的含义:2输入输出重定向系统定义三个标准文件:标准输入(stdin)、标准输出(stdout)、标准错误输入(
9、stderr)。(1)注释和管道符 注释:在shell脚本中,以“#”开头的正文行表示注释。特别的是,第一行以“#!”开头,表示脚本所使用的shell的绝对路径。例:#!/bin/bash#This script is a test!管道线:将一个命令的输出连接到另一个命令的输入。例:ls|sort (2)过滤器(filters):用来接收标准输入,经过一定的转化,再写到标准输出。所以,过滤器一般放在管道符中间。常用的过滤器如下:expand,sed,awk,fmt,tac,tr,grep,nl,pr。重定向用来改变程序运行的输入来源和输出地点。我们可以通过重定向将程序的输入定向到某个指定的文
10、件,或者将程序的输出结果定向到某个指定的文件。输出重定向 命令 文件名:将命令执行结果送到指定的文件,而不在屏幕上显示。如果指定的文件不存在,则新建这一文件;如果指定文件存在,则原来的内容被覆盖。命令文件名:在进行重定向时,只是追加到已有的文件之后,该文件原有的内容不被破坏。输入重定向 命令文件名:把命令的标准输入重新定向到指定文件。命令”,继续输入命令,按回车结束。4别名使用alias命令,可以定义一些别名。例:#alias rm f rm 5更改登录用户 命令 su 的意思是“substitute users”(代替用户),它允许用户暂时以其他用户身份登录。6特殊字符双引号 由双引号括起来
11、的字符,除$(用来访问变量的值),(命令替换),(转义字符)保留其特殊功能外,其余的字符都作为普通字符处理。单引号 用单引号括起来的字符都作为普通字符出现。倒引号 用倒引号括起来的字符串被shell解释为命令行。在执行的时候,shell会先执行该命令行,并以它的标准输出结果取代整个倒引号部分。反斜杠 转义字符(metacharacters),即把特殊字符变成普通字符。4.5.5 控制结构1测试语句shell中进行条件测试用test命令,test命令的语法如下:test 条件表达式 或者 条件表达式test命令可以进行数值测试、字符串测试、文件测试和逻辑操作符等的测试 2条件语句(1)if语句i
12、f语句用于条件控制结构中,其一般格式为:if 测试条件 then 命令1else 命令2fi (2)case语句case语句允许进行多重条件选择。其一般语法形式是:case 字符串 in模式字符串1)命令命令;模式字符串2)命令命令;模式字符串n)命令命令;*)命令esac 3循环语句shell中有三种用于循环的语句,它们是while语句、for语句和until语句。(1)while语句while语句的一般形式是:while 测试条件do命令表done (2)for语句for语句是最常用的建立循环结构的语句,一般格式为:for 变量 in 值表do命令表done (3)until语句until语句的一般形式是:until 测试条件do命令表done 4 其他语句break用于立即终止当前循环的执行,而continue用于跳过循环中在它之后的语句而回到本层循环的开头,开始下一次循环的执行。这两个语句只有放在do和done之间才有效。break命令的语法格式是:breakn其中,n表示要跳出n层循环。默认值是1,表示只跳出一层循环。continue命令的语法格式是:continuen其中,n表示从包含continue语句的最内层循环体向外跳到第n层循环。默认值为1,循环层数是由内向外编号。