综合实验说明_第1页
综合实验说明_第2页
综合实验说明_第3页
综合实验说明_第4页
综合实验说明_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、综合实验说明Linux进程间关系进程间关系n每个进程第一个进程是都有一个识别号,即每个进程第一个进程是都有一个识别号,即进程号(进程号(PID),系统启动后第一个进程是系统启动后第一个进程是init,它的,它的PID是是1,新进程由,新进程由fork系系统调用来产生,旧进程称为统调用来产生,旧进程称为父进程父进程,新进程称为,新进程称为子进程子进程。除。除init进程外,其他进程都有父进程。进程外,其他进程都有父进程。init login shell在在shell提示符后运行的提示符后运行的命令或程序除特殊情况命令或程序除特殊情况外均以外均以shell子进程的形子进程的形式运行式运行父进程父进

2、程父进程父进程子进程子进程 fork() wait()exit() wait()暂停父进程直到子进程退出暂停父进程直到子进程退出exec()?shell是如何运行程序的是如何运行程序的1.打印命打印命令提示符令提示符2.取得取得命令命令3.建立建立新进程新进程4.等待子进程等待子进程2.得到子进程得到子进程状态状态forkwaitexecmainexit前、后台进程在前、后台进程在wait()方面有何方面有何区别?区别?shell一、一、shell与内核的关系与内核的关系nShellShell是系统的是系统的用户界面用户界面,提供了用户与,提供了用户与内核内核进行进行交互操作的一种交互操作的一

3、种接口接口。ShellShell是一个是一个命令解释器命令解释器,它拥有自己的内建的,它拥有自己的内建的shellshell命令集。它命令集。它解释解释由用户输入的命令并且把它由用户输入的命令并且把它们送到内核执行。们送到内核执行。ShellShell起着协调用户与系统的一致性和在用户与起着协调用户与系统的一致性和在用户与系统之间进行交互的作用。系统之间进行交互的作用。类似于类似于windowswindows下的下的和和cmd.execmd.exe,也,也就是命令提示符。就是命令提示符。Shell的主要版本的主要版本nbash bash (Bourne Again Shell,LinuxBou

4、rne Again Shell,Linux使用的默认使用的默认ShellShell)ntcshtcshnkshkshnshellshell,顾名思义就是包含在,顾名思义就是包含在Fedora Fedora 外的一层外的一层“壳壳”,它是它是Fedora Fedora 与用户之间的界面、程序,它与用户之间的界面、程序,它接受、解释、接受、解释、执行用户的命令执行用户的命令。nshellshell可以接受的命令有几类:可以接受的命令有几类:p一类是一类是shellshell的的内部命令内部命令,它们包含在,它们包含在shellshell中,中,如如cdcd、pwdpwd等等,如同等等,如同DOSD

5、OS的的一样。查看一样。查看内部命令的使用可以用内部命令的使用可以用helphelp命令。命令。p另一类是另一类是外部命令外部命令,它们以,它们以可执行文件可执行文件的方式存的方式存放在文件系统某个特定的目录中,如存放在放在文件系统某个特定的目录中,如存放在/bin/bin、/sbin/sbin、/usr/usr/bin/bin等目录中,这类命令比如等目录中,这类命令比如lsls、cpcp、rmrm等命令。等命令。 当然,这类应用程序也可以是购买的商当然,这类应用程序也可以是购买的商业程序、应用软件等等。业程序、应用软件等等。 用户输入命令用户输入命令提交给提交给Shell是否为内部命令?是否

6、为内部命令?在系统中查找该命令的在系统中查找该命令的文件并调入内存执行文件并调入内存执行内核中的系统功能调用内核中的系统功能调用是是不是内部命令,不是内部命令,而是外部命令或而是外部命令或实用程序实用程序命令解释过程命令解释过程在查找命令时分为两种情况:在查找命令时分为两种情况:(1)用户给出了命令路径,)用户给出了命令路径,shell就沿着路径查找,若就沿着路径查找,若找到则调入内存执行,找不到则给出出错信息。找到则调入内存执行,找不到则给出出错信息。(2)用户没有给出命令路径。)用户没有给出命令路径。Shell就沿着环境变量就沿着环境变量PATH给出的路径依此查找,若找到则调入内存,否则给

7、出的路径依此查找,若找到则调入内存,否则给出出错信息。给出出错信息。# .bash_profile# Get the aliases and functionsif -f /.bashrc ; then. /.bashrcfi# User specific environment and startup programsPATH=$PATH:$HOME/bin:.BASH_ENV=$HOME/.bashrcUSERNAME=rootexport USERNAME BASH_ENV PATH/.bash_profile 注:参见教材注:参见教材p98#echo $PATH程序结构程序结构在在sh

8、ell命令中,我们将命令中,我们将ysh中的命令分成中的命令分成4种:种:普通命令(即外部命令)普通命令(即外部命令)重定向命令重定向命令管道命令管道命令内部命令内部命令初始化环境初始化环境打印提示符,获取用户输入的命令打印提示符,获取用户输入的命令解释命令解释命令寻找命令文件寻找命令文件执行命令执行命令程序结束程序结束void init_environ()打开打开test_profile文件,并准备读取文件,并准备读取 getenviron(n,buf);/*getenviron()函数函数*/envhis.start=0;/*初始化初始化history循环数组循环数组*/envhis.en

9、d=0;head=end=NULL;/*初始化初始化jobs链表指针链表指针*/初始化环境初始化环境在本程序中主要使用的数据结构是循环数组和链表。在本程序中主要使用的数据结构是循环数组和链表。1.循环数组循环数组 在在history命令中,用数组来存放我们输入过的命令。假设有命令中,用数组来存放我们输入过的命令。假设有一个能够记录一个能够记录10条历史记录的数组。其定义如下:条历史记录的数组。其定义如下:typedef struct ENV_HISTROYint start;int end;char his_cmd10100; ENV_HISTORY;ENV_HISTORY envhis;en

10、vhis.startenvhis.endenvhis.startenvhis.endenvhis.start初步设想:初步设想:envhis.end=envihis.end+1; strcpy(his_cmdenvhis.end,input); 更仔细的设计:更仔细的设计: envhis.end=(envhis.end+1)%10; if (envhis.end=envhis.start) envhis.start=(envhis.start+1)%10; strcpy(envhis.his_cmdenvhis.end,input);2. 链表链表n我们将我们将作业以链表的形式保存作业以链表的

11、形式保存,处理,处理jobs命令时,就是对链命令时,就是对链表的操作。表的操作。n链表的节点:链表的节点:typedef struct NODE pid_t pid; /进程号进程号 char cmd100; /对应的命令名对应的命令名 char state10; /作业状态作业状态stopped、running struct NODE *link; NODE;NODE *head,*end;n head指向链表指向链表表头表头,end指向链表指向链表表尾表尾。 解析命令解析命令nysh中的命令分为中的命令分为4种,其中我们种,其中我们对管道命令和重定向命令单对管道命令和重定向命令单独处理。独

12、处理。是的话设是的话设is_pr值为值为1。n对于一般命令,当对于一般命令,当is_pr的值为的值为0时,继续执行下面的程序,时,继续执行下面的程序,我们分析和处理普通命令(即外部命令)和内部命令。我们分析和处理普通命令(即外部命令)和内部命令。n该该for循环的作用是对输入命令进行解释。用户的输入循环的作用是对输入命令进行解释。用户的输入以空格以空格区分命令和参数区分命令和参数,如:,如:“ls l”。这个循环的作用就是分析这。这个循环的作用就是分析这条输入命令,把条输入命令,把命令命令ls放在放在arg0中,而参数中,而参数-l放在放在arg1中。中。narg0中的命令非常重要,我们可以中

13、的命令非常重要,我们可以通过判断通过判断arg0来判断用来判断用户的输入是普通命令还是内部命令户的输入是普通命令还是内部命令(history,jobs,exit,cd)。)。3.查找外部程序查找外部程序n对于普通命令的处理就是查找命令的可执行文件。对于普通命令的处理就是查找命令的可执行文件。n注意系统调用注意系统调用access()的使用。的使用。4.作业控制命令作业控制命令njobs命令:命令:显示作业,具体讲是遍历链表,将链表中的每个作业信息(作显示作业,具体讲是遍历链表,将链表中的每个作业信息(作业号、运行状态和对应的命令名)打印出来。业号、运行状态和对应的命令名)打印出来。n当用户要输入一个在后台运行的作业时,作业控制的工作是:当用户要输入一个在后台运行的作业时,作业控制的工作是:在链表后面加一个节点,将该作业的信息保存在新加的节点中。在链表后面加一个节点,将该作

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论