为什么'emacs&'导致我的程序崩溃-C?

时间:2019-10-09 11:03:52

标签: c shell process fork

在我完成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);
}

0 个答案:

没有答案