【深入理解计算机系统】CSAPP-实验六:ShellLab(未完成)

    科技2022-08-18  111

    前言

    对应书本第八章内容。

    通过写一个简单的Unix shell program,来熟悉程序控制以及信号处理。

    本机使用win10 +wsl2.0 + ubuntu18.04完成实验。

    点击查看我的全部代码

    reference

    CSAPP LAB

    CSAPP深入理解计算机——shellLab(2018)

    命令

    运行my shell sudo make ./tsh

    任务

    该实验在tsh.c文件中实现了大部分的框架,需要自己完成以下函数内容:

    eval:解析和解释命令行的主例程,大约70行。builtin_cmd:识别并解释内置命令:quit、fg、bg和jobs,大约25行。waitfg:等待前台作业完成do bgfg bg and fg built-in commands的实现sigchld_handler:SIGCHLD信号的处理函数sigint_handler:SIGINT信号的处理函数sigtstp_handler:SIGTSTP信号的处理函数

    要求

    提示应为字符串tsh>用户键入的命令行应包含一个名称和零个或多个参数,所有参数均由一个或多个空格分隔。 如果名称是内置命令,则shell应该立即处理它并等待下一个命令行。 否则,shell应该假定名称是可执行文件的路径,它在初始子进程的上下文中加载并运行。shell不需要支持管道|或I/O重定向<和>键入ctrl-c(ctrl-z)应该会导致SIGINT(SIGTSTP)信号发送到当前前台作业以及该作业的任何后代,如果没有前台作业,那么信号应该没有效果。如果命令行以&结束,则shell应该在后台运行作业,否则它将在前台运行该作业。每个作业都可以通过进程ID(PID)或作业ID(JID)进行标识,该ID是tsh分配的正整数。shell需要支持以下内置命令:quit、jobs、bg <job>和fg <job>。shell应该回收所有僵死子进程,如果任何作业由于接收到未捕获到的信号而终止,则shell应该识别此事件并打印一条消息,其中包含该作业的PID和有问题的信号的描述。

    评估

    共有16个trace文件。依次过关。

    可以通过对比看出是否完成任务:

    make test01 make rtest01

    内容

    未完成。

    看了两遍书,没有做下去的动力。因为没有碰到这个需求。

    需要的时候会回头的。

    代码是copy完善的。

    Processed: 0.019, SQL: 9