diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py
index c7a2213..1e1e625 100644
--- a/Lib/test/test_threading.py
+++ b/Lib/test/test_threading.py
@@ -286,6 +286,29 @@
         self.assertFalse(rc == 2, "interpreted was blocked")
         self.assertTrue(rc == 0, "Unexpected error")
 
+    def test_join_nondaemon_on_shutdown(self):
+        # Issue 1722344
+        # Raising SystemExit skipped threading._shutdown
+        import subprocess
+        p = subprocess.Popen([sys.executable, "-c", """if 1:
+                import threading
+                from time import sleep
+
+                def child():
+                    sleep(1)
+                    # As a non-daemon thread we SHOULD wake up and nothing
+                    # should be torn down yet
+                    print("Woke up, sleep function is:", sleep)
+
+                threading.Thread(target=child).start()
+                raise SystemExit
+            """],
+            stdout=subprocess.PIPE,
+            stderr=subprocess.PIPE)
+        stdout, stderr = p.communicate()
+        self.assertEqual(stdout, b"Woke up, sleep function is: <built-in function sleep>\n")
+        stderr = re.sub(br"^\[\d+ refs\]", b"", stderr, re.MULTILINE).strip()
+        self.assertEqual(stderr, b"")
 
     def test_enumerate_after_join(self):
         # Try hard to trigger #1703448: a thread is still returned in
diff --git a/Misc/ACKS b/Misc/ACKS
index cefbc11..bd2dd69 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -539,6 +539,7 @@
 Tim O'Malley
 Pascal Oberndoerfer
 Jeffrey Ollie
+Adam Olsen
 Grant Olson
 Piet van Oostrum
 Jason Orendorff
diff --git a/Misc/NEWS b/Misc/NEWS
index 9935088..8f22d9a 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,10 @@
 Core and Builtins
 -----------------
 
+- Issue #1722344: threading._shutdown() is now called in Py_Finalize(), which
+  fixes the problem of some exceptions being thrown at shutdown when the
+  interpreter is killed. Patch by Adam Olsen.
+
 - Issue #7065: Fix a crash in bytes.maketrans and bytearray.maketrans when
   using byte values greater than 127.  Patch by Derk Drukker.
 
diff --git a/Modules/main.c b/Modules/main.c
index 22794da..b413561 100644
--- a/Modules/main.c
+++ b/Modules/main.c
@@ -253,33 +253,6 @@
 }
 
 
-/* Wait until threading._shutdown completes, provided
-   the threading module was imported in the first place.
-   The shutdown routine will wait until all non-daemon
-   "threading" threads have completed. */
-#include "abstract.h"
-static void
-WaitForThreadShutdown(void)
-{
-#ifdef WITH_THREAD
-	PyObject *result;
-	PyThreadState *tstate = PyThreadState_GET();
-	PyObject *threading = PyMapping_GetItemString(tstate->interp->modules,
-						      "threading");
-	if (threading == NULL) {
-		/* threading not imported */
-		PyErr_Clear();
-		return;
-	}
-	result = PyObject_CallMethod(threading, "_shutdown", "");
-	if (result == NULL)
-		PyErr_WriteUnraisable(threading);
-	else
-		Py_DECREF(result);
-	Py_DECREF(threading);
-#endif
-}
-
 /* Main program */
 
 int
@@ -647,8 +620,6 @@
 		sts = PyRun_AnyFileFlags(stdin, "<stdin>", &cf) != 0;
 	}
 
-	WaitForThreadShutdown();
-
 	Py_Finalize();
 
 #ifdef __INSURE__
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index e7a0512..875e44e 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -18,6 +18,7 @@
 #include "eval.h"
 #include "marshal.h"
 #include "osdefs.h"
+#include "abstract.h"
 
 #ifdef HAVE_SIGNAL_H
 #include <signal.h>
@@ -66,6 +67,7 @@
 static void err_input(perrdetail *);
 static void initsigs(void);
 static void call_py_exitfuncs(void);
+static void wait_for_thread_shutdown(void);
 static void call_ll_exitfuncs(void);
 extern void _PyUnicode_Init(void);
 extern void _PyUnicode_Fini(void);
@@ -363,6 +365,8 @@
 	if (!initialized)
 		return;
 
+	wait_for_thread_shutdown();
+
 	/* The interpreter is still entirely intact at this point, and the
 	 * exit funcs may be relying on that.  In particular, if some thread
 	 * or exit func is still waiting to do an import, the import machinery
@@ -2059,6 +2063,34 @@
 	PyErr_Clear();
 }
 
+/* Wait until threading._shutdown completes, provided
+   the threading module was imported in the first place.
+   The shutdown routine will wait until all non-daemon
+   "threading" threads have completed. */
+static void
+wait_for_thread_shutdown(void)
+{
+#ifdef WITH_THREAD
+	PyObject *result;
+	PyThreadState *tstate = PyThreadState_GET();
+	PyObject *threading = PyMapping_GetItemString(tstate->interp->modules,
+						      "threading");
+	if (threading == NULL) {
+		/* threading not imported */
+		PyErr_Clear();
+		return;
+	}
+	result = PyObject_CallMethod(threading, "_shutdown", "");
+	if (result == NULL) {
+		PyErr_WriteUnraisable(threading);
+	}
+	else {
+		Py_DECREF(result);
+	}
+	Py_DECREF(threading);
+#endif
+}
+
 #define NEXITFUNCS 32
 static void (*exitfuncs[NEXITFUNCS])(void);
 static int nexitfuncs = 0;
