diff --git a/Lib/test/test_interpreters/test_stress.py b/Lib/test/test_interpreters/test_stress.py index 56bfc12f951f79..a3689a2acb9336 100644 --- a/Lib/test/test_interpreters/test_stress.py +++ b/Lib/test/test_interpreters/test_stress.py @@ -1,9 +1,11 @@ +import os import threading import unittest from test import support from test.support import import_helper from test.support import threading_helper +from test.support import warnings_helper # Raise SkipTest if subinterpreters not supported. _interpreters = import_helper.import_module('_interpreters') from concurrent import interpreters @@ -82,6 +84,25 @@ def test_create_interpreter_no_memory(self): with support.inject_memory_error_cm(0, 1): _interpreters.create() + @warnings_helper.ignore_fork_in_thread_deprecation_warnings() + @support.requires_fork() + def test_unclosed_interpreter_on_fork(self): + interp = interpreters.create() + interp.exec("pass") + + fds = os.pipe() + pid = os.fork() + + if pid == 0: + os.close(fds[0]) + os.write(fds[1], b"OK") + os._exit(0) + else: + os.close(fds[1]) + self.addCleanup(os.close, fds[0]) + value = os.read(fds[0], 100) + self.assertEqual(value, b"OK") + if __name__ == '__main__': # Test needs to be a package, so we can do relative imports.