diff --git a/IPython/kernel/multikernelmanager.py b/IPython/kernel/multikernelmanager.py
index 9fc5707..063aaf8 100644
--- a/IPython/kernel/multikernelmanager.py
+++ b/IPython/kernel/multikernelmanager.py
@@ -128,7 +128,17 @@ class MultiKernelManager(LoggingConfigurable):
             Should the kernel be shutdown forcibly using a signal.
         """
         self.log.info("Kernel shutdown: %s" % kernel_id)
-        del self._kernels[kernel_id]
+        self.remove_kernel(kernel_id)
+
+    def remove_kernel(self, kernel_id):
+        """remove a kernel from our mapping.
+
+        Mainly so that a kernel can be removed if it is already dead,
+        without having to call shutdown_kernel.
+
+        The kernel object is returned.
+        """
+        return self._kernels.pop(kernel_id)
 
     def shutdown_all(self, now=False):
         """Shutdown all kernels."""