368 字
2 分钟
Lab:Unix utilities
Lab:Unix utilities
- 及时关闭不需要的管道描述符,一旦发现以后用不上,立刻关闭。
当一个管道所有的写入端都关闭且管道内没有数据时,read 操作会返回 0。但如果写入端没有关闭,即使管道内没有数据,read 操作仍会进入堵塞状态知道管道内有新的数据,而不会返回 0。所以一定要即使关闭管道。
- shell 多个输出交叉的问题
在 xv6 系统中,shell 提示符 符号可能是因为你的 primes 程序输出和 shell 提示符在同时进行,导致输出混淆。
从你的代码来看,出现这个问题可能有以下几个原因:
- 标准输出未完全刷新:即使我们用 write 系统调用手动刷新输出,也可能出现竞争条件,导致输出和 shell 提示符混在一起。
- 父进程和子进程的同步问题:当父进程退出时,shell 可能会立即打印出提示符 $,而子进程的输出可能还未完成。
为了避免这种情况,我们可以确保在父进程和子进程正确同步,确保所有输出在程序退出之前完成。
如果父进程退出,shell 就会显示就会和子进程混淆。
Lab:Unix utilities
https://scudays.github.io/posts/6s081/lab/labunix-utilities/