diff --git a/src/blc_program.cpp b/src/blc_program.cpp
index fa7cb16ee90114068f912b1a529ec6514c93a69c..1647b91cd89455ee4d66d449fb32d9295913e925 100644
--- a/src/blc_program.cpp
+++ b/src/blc_program.cpp
@@ -408,8 +408,14 @@ void blc_program_args_display_help()
 }
 
 static void on_sigterm(int){
-    fprintf(stderr, "%s: receiving SIGTERM\n", blc_program_id);
-    exit(EXIT_SUCCESS);
+    if (blc_status==BLC_QUIT){
+        fprintf(stderr, "%s: receiving SIGTERM in quiting mode. Force to quit.\n", blc_program_id);
+        exit(EXIT_FAILURE);
+    }
+    else {
+        fprintf(stderr, "%s: receiving SIGTERM\n", blc_program_id);
+        blc_command_ask_quit();
+    }
 }
 
 static void on_sigtstp(int){