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照抄课堂上课件的代码即可。

到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 星期五
错误:

Makefile里加上CFLAGS = -Wall -O2 -pthread
#include "csapp.h"
然后把tsh.c里重复定义的代码都注释掉。
test07:信号掩蔽
exit总是会把主函数return掉,想要杀掉进程而不退出tsh,用kill。csapp.c里面的Kill支持不了-pid参数,只能用kill。在sigint_handler里用了exit(0)的话,会有以下结果(上面是我的输出,下面是参考输出):

如果不掩蔽,则前后台的process都会terminate掉。
2021-11-27 12:45:43 星期六

对test08的jobs命令显示不了Stopped的进程:1,在waitfg里面的waitpid用上WUNTRACED这个option,使得一旦有子进程terminate或者stop都会被watipid捕捉到,再通过WIFSTOPPED(status)(图中用的WIFEXITED,会过不了test07)进行判断,把stopped掉的进程状态设置为ST。

2,对应handout PDF的Hints最后一条,在合适的位置加上setpgid(0, 0),使得后台的进程一定拥有一个独立的进程组。
2022-01-23 19:40:50 星期日
放假了十几天了,捡回来接着做。
发现之前直到test09的输出结果都是没问题的,但是进程回收一块完全是一塌糊涂,根本没做,导致所有进程就算结束了也还会在jobs命令下有所显示。还得再看看书。