diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py
index 1474624..887f8ee 100644
--- a/Lib/test/_test_multiprocessing.py
+++ b/Lib/test/_test_multiprocessing.py
@@ -3801,6 +3801,7 @@ class _TestSharedMemory(BaseTestCase):
         sms.close()

     @unittest.skipIf(os.name != "posix", "not feasible in non-posix platforms")
+    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
     def test_shared_memory_SharedMemoryServer_ignores_sigint(self):
         # bpo-36368: protect SharedMemoryManager server process from
         # KeyboardInterrupt signals.
diff --git a/Lib/test/test_signal.py b/Lib/test/test_signal.py
index d41e94b..a1c15e7 100644
--- a/Lib/test/test_signal.py
+++ b/Lib/test/test_signal.py
@@ -78,6 +78,7 @@ class PosixTests(unittest.TestCase):
         self.assertLess(len(s), signal.NSIG)

     @unittest.skipUnless(sys.executable, "sys.executable required.")
+    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
     def test_keyboard_interrupt_exit_code(self):
         """KeyboardInterrupt triggers exit via SIGINT."""
         process = subprocess.run(
@@ -128,6 +129,7 @@ class WindowsSignalTests(unittest.TestCase):
             signal.signal(7, handler)

     @unittest.skipUnless(sys.executable, "sys.executable required.")
+    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
     def test_keyboard_interrupt_exit_code(self):
         """KeyboardInterrupt triggers an exit using STATUS_CONTROL_C_EXIT."""
         # We don't test via os.kill(os.getpid(), signal.CTRL_C_EVENT) here
@@ -1245,6 +1247,7 @@ class StressTest(unittest.TestCase):

 class RaiseSignalTest(unittest.TestCase):

+    @unittest.skipUnless(sys.stdin.isatty(), "KeyboardInterrupts require a TTY device")
     def test_sigint(self):
         with self.assertRaises(KeyboardInterrupt):
             signal.raise_signal(signal.SIGINT)
--
2.23.0
