在LINUXC中以多进程方式实现微型SHELL

在LINUXC中以多进程方式实现微型SHELL摘要:LinuxC为用户提供了一个强大的编程环境。该文分析并讨论了linuxOS下微型Shell的基本功能及实现机制,然后运用Linux下的多进程编程技术在LinuxC中设计了一个微型Shell,并给出了具体实现办法。关键词:LinuxC;LinuxOS;多进程编程;微型Shell:TP316文献标识码:A:1009-3044(2010)07-1602-03RealizationofMiniShellbyMulti-ProcessinLinuxCZHANGZhi-feng(CollegeofComputerScienceandTechnology,InnerMongoliaUniversityforNationalities,Tongliao028043,China)Abstract:LinuxCprovidesapowerfulprogrammingenvironmentforusers.Thepaperanalyzesanddiscussestheminishell'sbasicfunctionsandimplementationmechanismsundertheLinuxOS,andthendesignsamini-Shellbasedonmulti-processtechnologyintheLinuxC,andshowsaspecificimplementation.Keywords:linuxC;linuxOS;multi-processprogramming;minishellLinux的图形化环境有很大改进,在XWindow系统下,用户几乎可以完成所有的操作,只需打开shell提示来完成极少的任务,然而,许多Linux功能在shell提示下要比在图形化用户界面GUI下完成得更快[1]。众所周知,进程是操作系统和并发程序设计的一个非常重要的概念,本文主要应用Linux下的fork()等系统调用,使用多进程编程技术,设计和实现了一个微型shell(能完成LinuxOS标准shell的一部分功能),最后给出了在LinuxC下的实现代码。1微型Shell的基本功能及实现机制1.1Shell的基本功能Shell是功能强大的命令解释器,它不属于内核部分,而是在核心之外,以用户态方式运行[2],其最主要的功能是解释并执行用户键入的命令,实现用户与Linux核心的接口[3],它是Linux系统的重要组成部分。本文设计的微型shell就是要实现shell的最主要的功能。1.2微型Shell的实现机制系统初启后,核心为每个终端用户建立一个进程去执行Shell解释程序。它的执行过程基本上按如下步骤进行:1)读取用户由键盘输入的命令行,如命令末尾有号(后台命令符号),则设置后台执行标识,否则前台执行。2)分析命令,以命令名作为文件名,并将其它参数改造为系统调用execvp()内部处理所要求的形式。3)终端进程调用fork()建立一个子进程,当子进程运行时调用execvp(),从而达到执行用户提交命令所对应的可执行文件,将它调入内存,执行这个程序(解释这条命令)。4)如果命令末尾有号(后台命令符号),则终端进程不用系统调用wait()(或waitpid())等待,立即发提示符,让用户输入下一个命令,转1);如果命令末尾没有号,则终端进程要一直等待。当子进程完成处理后终止,向父进程(终端进程)报告,此时终端进程醒来,在做必要的判别等工作后,终端进程发提示符,让用户输入新的命令,重复上述处理过程。2Linux下的多进程编程欲实现微型shell的设计,要涉及Linux的如下几个主要的基于进程的系统调用函数:2.1fork()函数[4]fork函数(vfork函数功能与此类似)是用来创建子进程的函数,其函数原型如下所示:Pid_tfork();fork函数无参数,当一个进程调用它时,就出现两个几乎一模一样的进程。fork可能有以下三种不同的返回值:1)在父进程中,fork返回新创建的子进程的进程ID;2)在子进程中,fork返回0;3)如果出现错误,fork返回一个负值。2.2exec()函数调用fork函数后,子进程和父进程几乎完全一样,而多数情况下,子进程需要执行与父进程不同的代码,为此Linux系统提供了exec系统调用,以便用指定的目标程序更换进程的执行映象。Shell进程所创建的子进程正是使用它来执行用户键入的命令。exec函数有6种不同的使用格式,在本文只使用execvp格式,其函数原型如下:Intexecvp(constchar*filename,constchar*argv[]);其中,参数filename指出可执行目标程序的文件名,它可以通过环境变量PATH来搜索;参数argv是一个字符指针数组,它指出可执行目标程序使用的命令行参数表,按约定第一个字符指针指向与filename相同的字符串,最后一个指针指向一个空字符串,其余的指向该程序执行时所带的命令行参数。2.3wait()函数进程一旦调用了wait函数(waitpid函数功能与此类似),就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果它找到这样一个已经变成“僵尸”的子进程,...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

文秘专家
机构认证
内容提供者

1

确认删除?