summaryrefslogtreecommitdiffstats
path: root/Lib/test/_test_multiprocessing.py
diff options
context:
space:
mode:
authorRichard Oudkerk <shibturn@gmail.com>2013-10-17 13:24:06 (GMT)
committerRichard Oudkerk <shibturn@gmail.com>2013-10-17 13:24:06 (GMT)
commit1e2f67c05f38693f34f9d21b935141fa9ed624bc (patch)
tree193ed95c0062d935569041de7e6a404360a41da9 /Lib/test/_test_multiprocessing.py
parent7d270ee05d7553aea1052cf7957358888ac8ad85 (diff)
downloadcpython-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.py41
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()