前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ICS lab9 TinyShell 的10条建议

ICS lab9 TinyShell 的10条建议

作者头像
ApacheCN_飞龙
发布2019-02-15 15:15:07
5880
发布2019-02-15 15:15:07
举报
文章被收录于专栏:信数据得永生

0.仔细看pdf,尤其是hint部分。 1.先抄书上的代码,然后再添加书上没有的功能。做到一定程度后,测试已有的功能,要不然不好改正。注意规范输出格式。 2.WNOHANG,这个不用说了。 3.调用deletejob和更改state都应改放进sigchld_handler中,sigint和sigtstp的handler应该仅仅捕获信号并传给前台的进程组。 4.waitpid也应该只在sigchld_handler中出现,而且必须仅仅出现一次。waitfg中不应该调用waitpid,否则会和sigchld_handler产生回收竞争。 5.发送sigint,sigtstp,以及sigcont信号时要注意,传进-pid而不是pid,以便发送给整个进程组。否则trace11,12,13会有麻烦。子进程fork之后execve之前,注意要setgpid(0, 0)。 6.由于你的sigchld_handler要处理stop的进程,所以要加上WUNTRACED。然后循环里要分情况判断WIFEXITED,WIFSIGNALED,WIFSTOPPED。这三个函数会特别有用。 7.fg进程最多只有一个,所以一旦产生就必须调用waitfg,do_bgfg函数里也是。 8.一定要注意使用sigprocmask,pdf中也写了。由于addjob在eval中调用,deletejob在sigchld_handler中调用,很可能出现add之前就delete的情况。所以要在fork之前调用sigprocmask,屏蔽掉sigchld信号,然后add之后再解除。由于子进程也屏蔽掉了这个信号,所以要在fork之后execve之前解除掉。 9.waitfg的循环里注意调用sleep。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2013年11月23日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档