Ver código fonte

Shell: Move the first command in a pipeline to the pipeline pgid too

This process is supposed to be the session leader of the pipeline
process group, we can't *not* move it into that group :P
AnotherTest 4 anos atrás
pai
commit
063fb02ef4
1 arquivos alterados com 5 adições e 3 exclusões
  1. 5 3
      Shell/Shell.cpp

+ 5 - 3
Shell/Shell.cpp

@@ -622,12 +622,14 @@ RefPtr<Job> Shell::run_command(const AST::Command& command)
     }
 
     pid_t pgid = is_first ? child : (command.pipeline ? command.pipeline->pgid : child);
-    if (!m_is_subshell && command.should_wait) {
+    if ((!m_is_subshell && command.should_wait) || command.pipeline) {
         if (setpgid(child, pgid) < 0)
             perror("setpgid");
 
-        tcsetpgrp(STDOUT_FILENO, pgid);
-        tcsetpgrp(STDIN_FILENO, pgid);
+        if (!m_is_subshell) {
+            tcsetpgrp(STDOUT_FILENO, pgid);
+            tcsetpgrp(STDIN_FILENO, pgid);
+        }
     }
 
     while (write(sync_pipe[1], "x", 1) < 0) {