浏览代码

Shell: Make "fg" set the TTY PGID before SIGCONT'ing the job

Otherwise the child will get SIGTTIN/SIGTTOU on next TTY I/O.
Andreas Kling 5 年之前
父节点
当前提交
8dd0c391e9
共有 1 个文件被更改,包括 3 次插入0 次删除
  1. 3 0
      Shell/Builtin.cpp

+ 3 - 0
Shell/Builtin.cpp

@@ -349,6 +349,9 @@ int Shell::builtin_fg(int argc, const char** argv)
     dbg() << "Resuming " << job->pid() << " (" << job->cmd() << ")";
     dbg() << "Resuming " << job->pid() << " (" << job->cmd() << ")";
     fprintf(stderr, "Resuming job %" PRIu64 " - %s\n", job->job_id(), job->cmd().characters());
     fprintf(stderr, "Resuming job %" PRIu64 " - %s\n", job->job_id(), job->cmd().characters());
 
 
+    tcsetpgrp(STDOUT_FILENO, job->pgid());
+    tcsetpgrp(STDIN_FILENO, job->pgid());
+
     if (killpg(job->pgid(), SIGCONT) < 0) {
     if (killpg(job->pgid(), SIGCONT) < 0) {
         perror("killpg");
         perror("killpg");
         return 1;
         return 1;