2021-11-20 20:18:09 星期六
发现我真的是不会c语言……就连最简单的字符串比较都不会,还要上网去查才知道有strcmp这个函数……在对各种c库函数一无所知的情况下,感觉要实现些什么真的举步维艰啊……

不过,也真的觉得这次的lab不是很难(可能经过了pat三十多道题的洗礼有进步了),就愈发想要自己独立完成。然而,越是有这样的心,就越在简单的地方(指知识性的地方,了解过就几行搞定,没了解过就卡住的地方)就进行不下去了,到底还是水平太次了orz

2021-11-20 22:31:11 星期六
看了一下博客,完全是一点也不懂……太硬了,英文课本也看不懂,什么时候才能学下来啊……

2021-11-22 20:49:51 星期一
一个坑:需要到http://csapp.cs.cmu.edu/3e/code.html 把csapp.h的代码复制然后include进来。

开始有点明白了。按着16个trace一步一步走就行。前3个trace照抄课堂上课件的代码即可。
![](
https://cutesnaketop.oss-cn-beijing.aliyuncs.com/image/gitee-img/Screen Shot 2021-11-22 at 8.48.55 PM.jpg)
到trace05卡住了。理论上./myspin 2 & ./myspin 3 &所分配到的jid应该是1和2,但我这里是2和4。

2021-11-26 15:41:05 星期五
是2和4的原因在于没有waitfg。把waitfg函数完成即可。

2021-11-26 13:20:07 星期五
错误:
![](
https://cutesnaketop.oss-cn-beijing.aliyuncs.com/image/gitee-img/Screen Shot 2021-11-26 at 1.50.14 PM.jpg)
Makefile里加上CFLAGS = -Wall -O2 -pthread
#include "csapp.h"然后把tsh.c里重复定义的代码都注释掉。

test07:信号掩蔽
exit总是会把主函数return掉,想要杀掉进程而不退出tsh,用kill。csapp.c里面的Kill支持不了-pid参数,只能用kill。在sigint_handler里用了exit(0)的话,会有以下结果(上面是我的输出,下面是参考输出):
![](
https://cutesnaketop.oss-cn-beijing.aliyuncs.com/image/gitee-img/Screen Shot 2021-11-26 at 3.46.22 PM.jpg)
如果不掩蔽,则前后台的process都会terminate掉。

2021-11-27 12:45:43 星期六
![](
https://cutesnaketop.oss-cn-beijing.aliyuncs.com/image/gitee-img/Screen Shot 2021-11-27 at 12.46.59 PM.jpg)
对test08的jobs命令显示不了Stopped的进程:1,在waitfg里面的waitpid用上WUNTRACED这个option,使得一旦有子进程terminate或者stop都会被watipid捕捉到,再通过WIFSTOPPED(status)(图中用的WIFEXITED,会过不了test07)进行判断,把stopped掉的进程状态设置为ST。
![](
https://cutesnaketop.oss-cn-beijing.aliyuncs.com/image/gitee-img/Screen Shot 2021-11-27 at 12.53.39 PM.jpg)
2,对应handout PDF的Hints最后一条,在合适的位置加上setpgid(0, 0),使得后台的进程一定拥有一个独立的进程组。

2022-01-23 19:40:50 星期日
放假了十几天了,捡回来接着做。
发现之前直到test09的输出结果都是没问题的,但是进程回收一块完全是一塌糊涂,根本没做,导致所有进程就算结束了也还会在jobs命令下有所显示。还得再看看书。