summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNico Weber <nicolasweber@gmx.de>2016-03-05 02:21:14 (GMT)
committerNico Weber <nicolasweber@gmx.de>2016-03-05 02:21:14 (GMT)
commitb231274de33a6ebaa5ed284eb233fa360d84ad8f (patch)
tree67df569dd00fb5a050f484edb83d731b8495fe29
parentd63fe50c493c397bae3b4a3dd08cfac128000a81 (diff)
parente605fcc8ea91487e1653444ecf63f5597261f17c (diff)
downloadNinja-b231274de33a6ebaa5ed284eb233fa360d84ad8f.zip
Ninja-b231274de33a6ebaa5ed284eb233fa360d84ad8f.tar.gz
Ninja-b231274de33a6ebaa5ed284eb233fa360d84ad8f.tar.bz2
Merge pull request #1113 from nico/nosetsid
Revert #910.
-rw-r--r--src/subprocess-posix.cc7
-rw-r--r--src/subprocess_test.cc27
2 files changed, 3 insertions, 31 deletions
diff --git a/src/subprocess-posix.cc b/src/subprocess-posix.cc
index 2ddc709..ae7ae6f 100644
--- a/src/subprocess-posix.cc
+++ b/src/subprocess-posix.cc
@@ -70,11 +70,8 @@ bool Subprocess::Start(SubprocessSet* set, const string& command) {
break;
if (!use_console_) {
- // Put the child in its own session and process group. It will be
- // detached from the current terminal and ctrl-c won't reach it.
- // Since this process was just forked, it is not a process group leader
- // and setsid() will succeed.
- if (setsid() < 0)
+ // Put the child in its own process group, so ctrl-c won't reach it.
+ if (setpgid(0, 0) < 0)
break;
// Open /dev/null over stdin.
diff --git a/src/subprocess_test.cc b/src/subprocess_test.cc
index 2fe4bce..c8f2fb8 100644
--- a/src/subprocess_test.cc
+++ b/src/subprocess_test.cc
@@ -16,8 +16,6 @@
#include "test.h"
-#include <string>
-
#ifndef _WIN32
// SetWithLots need setrlimit.
#include <stdio.h>
@@ -146,22 +144,11 @@ TEST_F(SubprocessTest, InterruptParentWithSigHup) {
ASSERT_FALSE("We should have been interrupted");
}
-// A shell command to check if the current process is connected to a terminal.
-// This is different from having stdin/stdout/stderr be a terminal. (For
-// instance consider the command "yes < /dev/null > /dev/null 2>&1".
-// As "ps" will confirm, "yes" could still be connected to a terminal, despite
-// not having any of the standard file descriptors be a terminal.
-static const char kIsConnectedToTerminal[] = "tty < /dev/tty > /dev/null";
-
TEST_F(SubprocessTest, Console) {
// Skip test if we don't have the console ourselves.
if (isatty(0) && isatty(1) && isatty(2)) {
- // Test that stdin, stdout and stderr are a terminal.
- // Also check that the current process is connected to a terminal.
Subprocess* subproc =
- subprocs_.Add(string("test -t 0 -a -t 1 -a -t 2 && ") +
- string(kIsConnectedToTerminal),
- /*use_console=*/true);
+ subprocs_.Add("test -t 0 -a -t 1 -a -t 2", /*use_console=*/true);
ASSERT_NE((Subprocess*)0, subproc);
while (!subproc->Done()) {
@@ -172,18 +159,6 @@ TEST_F(SubprocessTest, Console) {
}
}
-TEST_F(SubprocessTest, NoConsole) {
- Subprocess* subproc =
- subprocs_.Add(kIsConnectedToTerminal, /*use_console=*/false);
- ASSERT_NE((Subprocess*)0, subproc);
-
- while (!subproc->Done()) {
- subprocs_.DoWork();
- }
-
- EXPECT_NE(ExitSuccess, subproc->Finish());
-}
-
#endif
TEST_F(SubprocessTest, SetWithSingle) {