diff options
author | Richard Oudkerk <shibturn@gmail.com> | 2013-10-17 13:24:06 (GMT) |
---|---|---|
committer | Richard Oudkerk <shibturn@gmail.com> | 2013-10-17 13:24:06 (GMT) |
commit | 1e2f67c05f38693f34f9d21b935141fa9ed624bc (patch) | |
tree | 193ed95c0062d935569041de7e6a404360a41da9 /Lib/test/_test_multiprocessing.py | |
parent | 7d270ee05d7553aea1052cf7957358888ac8ad85 (diff) | |
download | cpython-1e2f67c05f38693f34f9d21b935141fa9ed624bc.zip cpython-1e2f67c05f38693f34f9d21b935141fa9ed624bc.tar.gz cpython-1e2f67c05f38693f34f9d21b935141fa9ed624bc.tar.bz2 |
Try doing a raw test of os.fork()/os.kill().
Diffstat (limited to 'Lib/test/_test_multiprocessing.py')
-rw-r--r-- | Lib/test/_test_multiprocessing.py | 41 |
1 files changed, 36 insertions, 5 deletions
diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py index daf5319..d02106d 100644 --- a/Lib/test/_test_multiprocessing.py +++ b/Lib/test/_test_multiprocessing.py @@ -273,10 +273,11 @@ class _TestProcess(BaseTestCase): @classmethod def _test_terminate(cls): - print('signal.getsignal(SIGTERM) =', signal.getsignal(signal.SIGTERM)) - print('starting sleep') + print('signal.getsignal(SIGTERM) =', + signal.getsignal(signal.SIGTERM), file=sys.stderr) + print('starting sleep', file=sys.stderr) time.sleep(100) - print('finished sleep') + print('finished sleep', file=sys.stderr) def test_terminate(self): if self.TYPE == 'threads': @@ -314,11 +315,12 @@ class _TestProcess(BaseTestCase): try: signal.alarm(10) self.assertEqual(join(), None) - signal.alarm(0) except RuntimeError: - print('os.waitpid() =', os.waitpid(p.pid, os.WNOHANG)) + print('os.waitpid() =', + os.waitpid(p.pid, os.WNOHANG), file=sys.stderr) raise finally: + signal.alarm(0) signal.signal(signal.SIGALRM, old_handler) else: self.assertEqual(join(), None) @@ -333,6 +335,35 @@ class _TestProcess(BaseTestCase): # XXX sometimes get p.exitcode == 0 on Windows ... #self.assertEqual(p.exitcode, -signal.SIGTERM) + @unittest.skipIf(WIN32, 'Unix only') + def test_sigterm(self): + # A test for the Gentoo build bot which does not directly use + # multiprocessing. Start and terminate child processes. + if self.TYPE != 'processes': + return + for i in range(10): + pid = os.fork() + if pid == 0: + try: + print('sleeping', file=sys.stderr) + time.sleep(100) + print('waking', file=sys.stderr) + finally: + sys.stderr.flush() + os._exit(0) + else: + os.kill(pid, signal.SIGTERM) + def handler(*args): + raise RuntimeError('join took too long: %s' % p) + old_handler = signal.signal(signal.SIGALRM, handler) + try: + signal.alarm(10) + pid_status = os.waitpid(pid, 0) + self.assertEqual(pid_status[0], pid) + finally: + signal.alarm(0) + signal.signal(signal.SIGALRM, old_handler) + def test_cpu_count(self): try: cpus = multiprocessing.cpu_count() |