Ruixiang Li

TshLab

PKU,2025Fall,ICS,TshLab

⚠️ 致各位同学:

本笔记的目的是借鉴交流,而非仅仅提供答案,请勿抄袭,后果自负。

你可以参考我的想法、了解有哪些注意的地方,但是在自己实现的时候不要参考,避免抄袭。

(虽然都说这个Lab是最难的,但是我做得比 Archlab 快很多)

写在前面

你的任务是在 tsh.c 文件内补全 4 个函数,实现一个简单的 shell 程序。

编译后运行 ./tsh 即可测试 shell。

运行 ./runtrace -h 获取如何使用;

运行 ./runtrace 进行测试和评分。(其他用法参考 writeup

tine shell 要求(待实现)

阅读 tsh.c

tsh.c中已经实现了基本的框架和数据结构,只需要补全代码即可。

job_t

struct job_t {              /* The job struct */
    pid_t pid;              /* job PID */
    int jid;                /* job ID [1, 2, ...] */
    int state;              /* UNDEF, BG, FG, or ST */
    char cmdline[MAXLINE];  /* command line */
};
struct job_t job_list[MAXJOBS]; /* The job list */

(参考书 P529 从键盘发送信号)

所有的 job 都会被存储在一个全局变量 job_list 中,这是一个数组,其中每个元素都是一个 job_t 结构体。

cmdline_tokens

struct cmdline_tokens {
    int argc;               /* Number of arguments */
    char *argv[MAXARGS];    /* The arguments list */
    char *infile;           /* The input file */
    char *outfile;          /* The output file */
    enum builtins_t {       /* Indicates if argv[0] is a builtin command */
        BUILTIN_NONE,
        BUILTIN_QUIT,
        BUILTIN_JOBS,
        BUILTIN_BG,
        BUILTIN_FG,
        BUILTIN_KILL,
        BUILTIN_NOHUP} builtins;
};