这是作业
嘿伙计们,这是我现在正在处理的任务的一部分:
使用 & 在后台执行的带有或不带参数的命令。
为简单起见,假设 & 总是最后一行。
示例:vi &
详细信息:在这种情况下,您的 shell 必须执行命令并立即返回,在命令完成之前不会阻塞。必须区分不需要交互式输入的进程和需要交互式输入的进程,例如 who 命令与 vi 命令。
概念:后台执行、信号、信号处理程序、进程组、异步执行。系统调用:sigset()、sigaction() 信号:SIGTTOU
所以我们正在用 C 编写我们的“自己的 shell”,而我现在编写的代码运行良好。这里有一些片段,所以你可以看到我在做什么:
// Check for ampersand
block = (ampersand(args) == 1);
& 号函数根据我的调试语句正常工作并返回。这是我几乎肯定我实际上必须做后台代码的地方,我在这里寻求帮助:
// Wait for the child process to complete, if necessary
if(block) {
//If this executes, there IS an ampersand, and should be backgrounded
printf("Waiting for child, pid = %d\n", child_id);
result = waitpid(child_id, &status, 0);
} else {
//If this gets executed, there is no ampersand, and should not be backgrounded
result = waitpid(child_id, &status, 0);
}
所以现在我可以输入“ls -l &”,它会执行 ls -l 命令,然后执行 printf 语句。所以这很好。如果我不把 & 放在那里,它就不会执行 printf。也很好。
百万美元的问题: 一旦我点击了 printf 语句,那我应该怎么做?请注意,这是一门入门课程,除了我已经编写的代码之外,我知道的不多。我的意思是,我知道 C,但 Unix 对我来说很陌生。
在此先感谢,如果需要,我会提供更多详细信息:)