diff --git a/main.cpp b/main.cpp
index 13762d2c46ee83c96bc16595eba847206a29ce20..fc1e3316a0b6073b51232fffa897e406d706380c 100644
--- a/main.cpp
+++ b/main.cpp
@@ -129,16 +129,20 @@ int main(int argc, char *argv[])
     CLI::App app{"Pastis help"};
 
     app.add_option("number,-n,--number", number, "Number of cells");//->required();
+
+    int threads=-1;
+    app.add_option("--threads", threads, "Number of Kokkos threads")->check(CLI::Range(1,std::numeric_limits<decltype(threads)>::max()));
+
+    std::string colorize="auto";
+    app.add_set("--colorize", colorize, {"auto", "yes", "no"}, "Colorize console output", true);
+
     bool disable_fpe = false;
     app.add_flag("--no-fpe", disable_fpe, "Do not trap floating point exceptions");
     bool disable_signals = false;
     app.add_flag("--no-signal", disable_signals, "Do not catches signals");
 
-    std::string colorize="auto";
-    app.add_set("--colorize", colorize, {"auto", "yes", "no"}, "Colorize console output", true);
-
-    int threads=-1;
-    app.add_option("--threads", threads, "Number of Kokkos threads")->check(CLI::Range(1,std::numeric_limits<decltype(threads)>::max()));
+    std::string pause_on_error="auto";
+    app.add_set("--pause-on-error", pause_on_error, {"auto", "yes", "no"}, "Pause for debugging on unexpected error", true);
 
     std::atexit([](){std::cout << rang::style::reset;});
     try {
@@ -149,6 +153,7 @@ int main(int argc, char *argv[])
 
     ConsoleManager::init(colorize);
     FPEManager::init(not disable_fpe);
+    SignalManager::setPauseForDebug(pause_on_error);
     SignalManager::init(not disable_signals);
   }
   
diff --git a/utils/SignalManager.cpp b/utils/SignalManager.cpp
index 2f873ec1947913f1946e3d9b93b763080c3cbec4..f82d0f4e6336fa3b09211cae5be691f2eb79f0cc 100644
--- a/utils/SignalManager.cpp
+++ b/utils/SignalManager.cpp
@@ -1,8 +1,17 @@
 #include <SignalManager.hpp>
+#include <ConsoleManager.hpp>
 #include <csignal>
 #include <rang.hpp>
 #include <iomanip>
 
+#warning must create a specific class for pausing and use enum class
+#include <string>
+std::string SignalManager::s_pause_on_error = "auto";
+void SignalManager::setPauseForDebug(const std::string& pause_on_error)
+{
+  s_pause_on_error = pause_on_error;
+}
+
 std::string SignalManager::signalName(int s)
 {
   switch (s) {
@@ -52,9 +61,15 @@ void SignalManager::handler(int s)
 	    << " caught"
 	    << rang::style::reset
 	    << " ***\n";
-  
-  std::signal(SIGINT, SIG_DFL);
-  SignalManager::pauseForDebug();
+
+  if ((ConsoleManager::isTerminal(std::cout) and
+       (s_pause_on_error == "auto")) or
+      (s_pause_on_error == "yes")) {
+    std::signal(SIGINT, SIG_DFL);
+    SignalManager::pauseForDebug();
+  } else {
+    std::exit(0);
+  }
  }
 
 void SignalManager::init(const bool& enable)
diff --git a/utils/SignalManager.hpp b/utils/SignalManager.hpp
index 485820f9c29f5d6358d269f273b0e95a6f8de371..d4ff3239dfaa7b7dde7315eedc55d73e43c0545e 100644
--- a/utils/SignalManager.hpp
+++ b/utils/SignalManager.hpp
@@ -6,10 +6,12 @@
 struct SignalManager
 {
 private:
+  static std::string s_pause_on_error;
   static std::string signalName(int signal);
   static void pauseForDebug();
   static void handler(int signal);
 public:
+  static void setPauseForDebug(const std::string& pause_on_error);
   static void init(const bool& enable);
 };