diff --git a/maap_utils/JobManager.py b/maap_utils/JobManager.py
index ed8261637be9ce251dc0d5d82d45553909c87886..460778a497080929c6222f0dcb2fbb544682b91f 100644
--- a/maap_utils/JobManager.py
+++ b/maap_utils/JobManager.py
@@ -43,23 +43,28 @@ class JobManager:
         )
 
         tqdm.write("Submitting jobs")
-        for job_kwargs in tqdm(
-            self.job_kwargs_list[: self.config.job_limit],
-            total=total_jobs,
-            desc="",
-        ):
-            try:
-                job = Job(job_kwargs)
-                job.submit()
-                self.ledger.add_job(job)
-                job_batch_counter += 1
-            except Exception as e:
-                logging.error(f"Error submitting job: {e}")
-                continue
-
-            if job_batch_counter == job_batch_size:
-                time.sleep(job_submit_delay)
-                job_batch_counter = 0
+        try:
+            for job_kwargs in tqdm(
+                self.job_kwargs_list[: self.config.job_limit],
+                total=total_jobs,
+                desc="",
+            ):
+                try:
+                    job = Job(job_kwargs)
+                    job.submit()
+                    self.ledger.add_job(job)
+                    job_batch_counter += 1
+                except Exception as e:
+                    logging.error(f"Error submitting job: {e}")
+                    continue
+
+                if job_batch_counter == job_batch_size:
+                    time.sleep(job_submit_delay)
+                    job_batch_counter = 0
+        except KeyboardInterrupt:
+            logging.info("Submission interrupted by user")
+            self.exit_gracefully()
+            sys.exit(1)
 
         # Store output_dir and write job IDs
         self.output_dir = output_dir