diff options
author | Nicolas Despres <nicolas.despres@gmail.com> | 2014-04-16 08:05:25 (GMT) |
---|---|---|
committer | Nicolas Despres <nicolas.despres@gmail.com> | 2015-04-24 14:40:03 (GMT) |
commit | b4bc5cf7c924be251a5c8abdfca58f47c3f5c185 (patch) | |
tree | ad8fd16c3285fb8582734148663b8ce18d7cc77c /src/subprocess_test.cc | |
parent | b2b8f3a12d3323c4273aa63460f482d6f7f03211 (diff) | |
download | Ninja-b4bc5cf7c924be251a5c8abdfca58f47c3f5c185.zip Ninja-b4bc5cf7c924be251a5c8abdfca58f47c3f5c185.tar.gz Ninja-b4bc5cf7c924be251a5c8abdfca58f47c3f5c185.tar.bz2 |
Allow SIGTERM for interruption.
Default signal sent by many other programs (mainly kill(1)) to gently
terminates another one is SIGTERM.
Diffstat (limited to 'src/subprocess_test.cc')
-rw-r--r-- | src/subprocess_test.cc | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/src/subprocess_test.cc b/src/subprocess_test.cc index 1838c43..07cc52f 100644 --- a/src/subprocess_test.cc +++ b/src/subprocess_test.cc @@ -98,6 +98,30 @@ TEST_F(SubprocessTest, InterruptParent) { ASSERT_FALSE("We should have been interrupted"); } +TEST_F(SubprocessTest, InterruptChildWithSigTerm) { + Subprocess* subproc = subprocs_.Add("kill -TERM $$"); + ASSERT_NE((Subprocess *) 0, subproc); + + while (!subproc->Done()) { + subprocs_.DoWork(); + } + + EXPECT_EQ(ExitInterrupted, subproc->Finish()); +} + +TEST_F(SubprocessTest, InterruptParentWithSigTerm) { + Subprocess* subproc = subprocs_.Add("kill -TERM $PPID ; sleep 1"); + ASSERT_NE((Subprocess *) 0, subproc); + + while (!subproc->Done()) { + bool interrupted = subprocs_.DoWork(); + if (interrupted) + return; + } + + 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". @@ -221,7 +245,7 @@ TEST_F(SubprocessTest, SetWithLots) { } ASSERT_EQ(kNumProcs, subprocs_.finished_.size()); } -#endif // !__APPLE__ && !_WIN32 +#endif // !__APPLE__ && !_WIN32 // TODO: this test could work on Windows, just not sure how to simply // read stdin. |