介绍
分配的目的是使您更加熟悉过程控制和信号通知的概念。为此,您需要编写一个简单的Unix Shell程序来支持作业控制。
后勤
您最多可以由两个人组成的小组来解决此分配问题。唯一的“ handin”将是电子的。对作业的任何澄清和修订都将发布在课程网页上。
发放指示
现场说明:在此处插入一段,说明教师如何将shlab-handout.tar文件分发给学生。这是我们在CMU使用的说明。
首先将文件shlab-handout.tar复制到计划在其中进行工作的受保护目录(实验室目录)。然后执行以下操作:
•键入命令tar xvf shlab-handout.tar展开tarfile。
•键入命令make来编译和链接一些测试例程。
•在tsh.c顶部的标题注释中输入团队成员的姓名和Andrew ID。
查看tsh.c(微型shell)文件,您将看到它包含一个简单的Unix shell的功能框架。
为了帮助您入门,我们已经实现了一些不太有趣的功能。
您的作业1是要完成下面列出的其余空功能。为方便起见,我们在参考解决方案中列出了每个功能的大概代码行数(其中包含大量注释)。
•eval:解析和解释命令行的主例程。 [70行]
•内置cmd:识别并解释内置命令:quit,fg,bg和jobs。 [25行]
•do bgfg:实现bg和fg内置命令。 [50行]
•waitfg:等待前台作业完成。 [20行]
•sigchld处理程序:捕获SIGCHILD信号。 80行]
•sigint处理程序:捕获SIGINT(ctrl-c)信号。 [15行]
•sigtstp处理程序:捕获SIGTSTP(ctrl-z)信号。 [15行]
每次修改tsh.c文件时,键入make即可重新编译它。要运行您的shell,请在命令行中输入tsh:
UNIX> ./tsh
tsh> [在此处键入命令到您的shell]
Unix Shell概述
Shell是一个交互式的命令行解释器,它代表用户运行程序。
Shell反复打印提示,在stdin上等待命令行,然后按照命令行内容的指示执行一些操作。
命令行是由空格分隔的ASCII文本单词序列。命令行中的第一个单词是内置命令的名称或可执行文件的路径名。
其余的单词是命令行参数。如果第一个单词是内置命令,则外壳程序将在当前进程中立即执行该命令。
否则,假定该单词为可执行程序的路径名。在这种情况下,shell将派生一个子进程,
然后在该子进程的上下文中加载并运行该程序。由于解释单个命令行而创建的子进程统称为作业。
通常,一个作业可以包含多个通过Uni