在我完成Shell之前的最后一件事,是谁能向我解释为什么我在运行emacs &
时会导致我的Shell程序崩溃并由于某种原因而误读了输入。下面是我的代码,它指示要在后台运行的新进程,请注意,&
中的emacs &
已从命令中删除,并告诉我的shell在后台运行该命令。在此先感谢您提供的任何帮助或建议。
int execBgCmd(char **cmds, Command cmd) {
pid_t pid1, pid2;
int status;
if (pid1 = fork()) {
waitpid(pid1, &status, 1);
} else if (!pid1) {
if (pid2 = fork()) {
exit(0);
} else if (!pid2) {
if (cmd.rstdin != NULL) {
int fd0 = open(cmd.rstdin, O_RDONLY);
dup2(fd0, STDIN_FILENO);
close(fd0);
}
if (cmd.rstdout != NULL) {
int fd1 = open(cmd.rstdout , O_CREAT | O_WRONLY | O_TRUNC, 0644) ;
dup2(fd1, STDOUT_FILENO);
close(fd1);
}
if (execvp(cmds[0], cmds) < 0) {
printf("\nCould not execute command, try again.\n");
}
} else {
fprintf(stderr, "Fork Failure");
}
} else {
fprintf(stderr, "Fork Failure");
}
wait(NULL);
}