我在sigaction的测评中通过了1、2、3、4、5五个测试点,但是在第6个点出现了Something unexpected ocurred
这样的结果,请问这是什么错误呢?
求求助教来一些复杂的样例QAQ
最后修改于:
最后回复于:
回复主题帖
同样是这个info,已经搓了好几组了还是卡在这...
最后修改于:2024-06-13 22:25:41
现在4没问题了,卡在6了
最后修改于:2024-06-13 23:39:06
修改了什么地方呢,我这面epc+4后还是没有过QWQ
最后修改于:2024-06-13 23:47:10
试试这个,有关SIGKILL的
1 | #include <lib.h> |
正确结果应该是不进入CHLD的handler,直接结束
最后修改于:2024-06-13 23:57:12
现在我的4也没问题了
但这个6我全错,,,bug也太难想了QUQ
最后修改于:2024-06-15 21:03:53
同学可以请教一下是什么地方有问题吗?
最后修改于:2024-06-15 21:12:01
我是考虑到有些信号在没有注册(调用sigaction
)情况下就会发送,所以在do_signal
中多了一些判断条件。
有下面这个例子:
1 | #include <lib.h> |
这个程序应该是会正常结束(我最后会输出panic at sched
),而不是因为没有注册而发生一些异常的事情(比如自己定义的panic
)。
如果将5
修改成了SIGSEGV, SIGILL, SIGINT, SIGKILL
,程序不会打印the program will run as usual
。
最后修改于:2024-06-15 21:27:04
我现在和你一样。我觉得应该有更强更综合的样例来说明这个任务实现上的限制,现在的指导写的太模糊了。。
最后修改于:2024-06-15 23:22:32
回复主题帖
我从6/18到16/18是在默认处理为忽略时候对tf->epc0+4
最后修改于:2024-06-13 23:26:45
回复主题帖
我的测试点六错误信息是WA: sigaction error,想问问同学们有没有出现过类似的错误
最后修改于:2024-06-16 15:19:08
我之前也出现过,是int sigaction(int signum, const struct sigaction *newact, struct sigaction *oldact)
中oldact
的设置不对,应该保存signum
对应的那个掩码(我之前是保存了当前进程屏蔽的掩码)
最后修改于:2024-06-16 15:57:53
我的这里好像没问题,不过修改了注册时就屏蔽自己后,测试点6过了一个,报错信息也变成了unexpected error
1 | sys_sigaction |
最后修改于:2024-06-16 17:22:50
我的6/18->18/18
1 | #include <lib.h> |
在未进行任何注册的情况下也应该能默认处理
最后修改于:2024-06-16 16:33:37
回复主题帖
我过了
一个很关键的修改是sigset系列操作中对输入是否为空更严格的检查,这个小改动能决定是0/6还是6/6.
所以我推测test6是有更极端的参数,比如给set传入NULL这种,导致如果不做检查就会0/6。不知道是否有帮助。
最后修改于:2024-06-16 17:57:45
神仙,太谢谢你辣~
最后修改于:2024-06-16 18:05:58
那cp0_epc + 4
的问题现在同学是怎么解决的呢?
最后修改于:2024-06-16 20:03:18
就是只有sigsys才+4,不过这个我做过实验,是不是只有sigsys才+4不影响正确性
最后修改于:2024-06-16 20:36:45
另外,如果输入为null也不要加多余的panic,要么忽略要么返回-1
最后修改于:2024-06-16 20:39:51
请问对于SIGKILL,需要让其他信号在注册时或者修改掩码时不能屏蔽SIGKILL吗,还是说在给进程添加信号时检测到进程存在等待的SIGKILL时不发送就可以了呢?
最后修改于:2024-06-18 20:45:10