diff --git a/Lib/asyncio/events.py b/Lib/asyncio/events.py
index 40946bb..68dc25e 100644
--- a/Lib/asyncio/events.py
+++ b/Lib/asyncio/events.py
@@ -625,16 +625,23 @@
 
     class _Local(threading.local):
         _loop = None
+        _pid = None
         _set_called = False
 
     def __init__(self):
         self._local = self._Local()
+        self._local._pid = os.getpid()
 
     def get_event_loop(self):
         """Get the event loop.
 
         This may be None or an instance of EventLoop.
         """
+        if self._local._pid != os.getpid():
+            # If we detect we're in a child process forked by multiprocessing,
+            # we reset self._local so that we'll get a new event loop.
+            self._local = self._Local()
+
         if (self._local._loop is None and
                 not self._local._set_called and
                 isinstance(threading.current_thread(), threading._MainThread)):
diff --git a/Lib/test/test_asyncio/test_unix_events.py b/Lib/test/test_asyncio/test_unix_events.py
index a01efed..1bc2d86 100644
--- a/Lib/test/test_asyncio/test_unix_events.py
+++ b/Lib/test/test_asyncio/test_unix_events.py
@@ -13,6 +13,7 @@
 import tempfile
 import threading
 import unittest
+import multiprocessing
 from unittest import mock
 from test import support
 
@@ -1804,6 +1805,37 @@
         return asyncio.FastChildWatcher()
 
 
+class ForkedProcessTests(unittest.TestCase):
+    def setUp(self):
+        self.parent_loop = asyncio.SelectorEventLoop()
+        asyncio.set_event_loop(self.parent_loop)
+        self.ctx = multiprocessing.get_context("fork")
+
+    def tearDown(self):
+        self.parent_loop.close()
+
+    def _check_loops_not_equal(self, old_loop):
+        loop = asyncio.get_event_loop()
+        if loop is old_loop:
+            raise RuntimeError("Child process inherited parent's event loop")
+
+        try:
+            val = loop.run_until_complete(asyncio.sleep(0.05, result=42))
+            if val != 42:
+                raise RuntimeError("new event loop does not work")
+        finally:
+            loop.close()
+
+        sys.exit(loop is old_loop)
+
+    def test_new_loop_in_child(self):
+        p = self.ctx.Process(target=self._check_loops_not_equal,
+                             args=(self.parent_loop,))
+        p.start()
+        p.join()
+        self.assertEqual(p.exitcode, 0)
+
+
 class PolicyTests(unittest.TestCase):
 
     def create_policy(self):
diff --git a/Misc/NEWS.d/next/Library/2018-05-29-12-06-54.bpo-22087.uv7_Y6.rst b/Misc/NEWS.d/next/Library/2018-05-29-12-06-54.bpo-22087.uv7_Y6.rst
new file mode 100644
index 0000000..92127cd
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-05-29-12-06-54.bpo-22087.uv7_Y6.rst
@@ -0,0 +1,3 @@
+Fix Policy.get_event_loop() to detect fork and return a new loop.
+
+Original patch by Dan O'Reilly.
