我有几个问题,作业可以看这里:http ://www.cs.uic.edu/~i385/
这些问题并不需要你给我编码答案,而是问题,以便我可以更好地理解作业。
我已经读过这个文档几次了,我没有看到我需要实现的命令列表。有少量的shell命令吗?如果是这样,我在哪里可以看到它们的完整列表。如果有很多,那么这个程序是否应该模拟一个shell,它接受你的输入,解析它,然后将它传递给实际的操作系统?如果是这种情况,有人可以链接我用什么功能来完成这个吗?
链接页面上的列表讨论了 Fork 和 Exec 等命令以及手册页,这些是我要在实际代码中使用的功能,以便我的程序正常工作,对吗?
上述分配链接中有一段内容如下:
记录每个孩子终止时的用户和系统时间。这些应该在个别孩子完成时报告,并且应该通过键入“stats”来获得完整的历史记录。
wait4
系统调用将返回特定等待孩子的所需信息。getrusage
有关数据结构的完整描述,请参见手册页rusage
。*我对我们应该记录的这个“用户”特别好奇,这是登录到机器的个人的实际登录名,还是我们在 shell 开始时使用的某种用户名?
我在康奈尔的网站上找到了这个,shell 的伪代码,它的内容如下:
.
int
main(int argc, char * * argv) {
while (1) {
int childPid;
char * cmdLine;
printPrompt();
cmdLine = readCommandLine(); //or GNU readline("");
cmd = parseCommand(cmdLine);
record command in history list(GNU readline history ? )
if (isBuiltInCommand(cmd)) {
executeBuiltInCommand(cmd);
} else {
childPid = fork();
if (childPid == 0) {
executeCommand(cmd); //calls execvp
} else {
if (isBackgroundJob(cmd)) {
record in list of background jobs
} else {
waitpid(childPid);
}
}
}
}
}
上面的逻辑流程对我来说很有意义,但我对这些事情有点迷茫:
- 内置命令是什么意思?
- 如果它不是“内置”的,那么程序怎么知道该怎么做呢?
- 最后,什么是后台工作?