diff --git a/src/sdl/i_system.c b/src/sdl/i_system.c
index 95745497cb446ccdd14f873256f0bb43867c08f2..4bed8e7f2798320e98dbf2953b96afb34e04afe9 100644
--- a/src/sdl/i_system.c
+++ b/src/sdl/i_system.c
@@ -2167,6 +2167,26 @@ void I_Sleep(void)
 }
 
 #ifdef NEWSIGNALHANDLER
+static void newsignalhandler_Warn(const char *pr)
+{
+	char text[128];
+
+	snprintf(text, sizeof text,
+			"Error while setting up signal reporting: %s: %s",
+			pr,
+			strerror(errno)
+	);
+
+	I_OutputMsg("%s\n", text);
+
+	SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,
+		"Startup error",
+		text, NULL);
+
+	I_ShutdownConsole();
+	exit(-1);
+}
+
 static void I_Fork(void)
 {
 	int child;
@@ -2178,10 +2198,7 @@ static void I_Fork(void)
 	switch (child)
 	{
 		case -1:
-			I_Error(
-					"Error setting up signal reporting: fork(): %s\n",
-					strerror(errno)
-			);
+			newsignalhandler_Warn("fork()");
 			break;
 		case 0:
 			break;
@@ -2189,10 +2206,7 @@ static void I_Fork(void)
 			if (wait(&status) == -1)
 			{
 				kill(child, SIGKILL);
-				I_Error(
-						"Error setting up signal reporting: fork(): %s\n",
-						strerror(errno)
-				);
+				newsignalhandler_Warn("wait()");
 			}
 			else
 			{
@@ -2211,7 +2225,7 @@ static void I_Fork(void)
 					status = WEXITSTATUS (status);
 				}
 
-				I_ShutdownSystem();
+				I_ShutdownConsole();
 				exit(status);
 			}
 	}
@@ -2468,8 +2482,6 @@ void I_ShutdownSystem(void)
 {
 	INT32 c;
 
-	I_ShutdownConsole();
-
 	for (c = MAX_QUIT_FUNCS-1; c >= 0; c--)
 		if (quit_funcs[c])
 			(*quit_funcs[c])();