diff --git a/util/dvsim/Deploy.py b/util/dvsim/Deploy.py
index 44d2a5d..471f3a3 100644
--- a/util/dvsim/Deploy.py
+++ b/util/dvsim/Deploy.py
@@ -322,6 +322,38 @@
             self.link_odir()
             del self.process
 
+    def kill(self):
+        '''Kill running processes.
+        '''
+        if self.status == "D" and self.process.poll() is None:
+            self.kill_remote_job()
+            self.process.kill()
+            if self.log_fd: self.log_fd.close()
+            self.status = "K"
+        # recurisvely kill sub target
+        elif len(self.sub):
+            for item in self.sub:
+                item.kill()
+
+    def kill_remote_job(self):
+        '''
+        If jobs are run in remote server, need to use another command to kill them.
+        '''
+        #TODO: Currently only support lsf, may need to add support for GCP later.
+
+        # If use lsf, kill it by job ID.
+        if re.match("^bsub", self.sim_cfg.job_prefix):
+            # get job id from below string
+            # Job <xxxxxx> is submitted to default queue
+            grep_cmd = "grep -m 1 -E \'" + "^Job <" + "\' " + self.log
+            (status, rslt) = subprocess.getstatusoutput(grep_cmd)
+            if rslt != "":
+                job_id = rslt.split('Job <')[1].split('>')[0]
+                try:
+                    p = subprocess.run(["bkill", job_id], check=True)
+                except Exception as e:
+                    log.error("%s: Failed to run bkill\n", e)
+
     @staticmethod
     def increment_timer():
         # sub function that increments with overflow = 60
diff --git a/util/dvsim/FlowCfg.py b/util/dvsim/FlowCfg.py
index ca76a18..7656ea4 100644
--- a/util/dvsim/FlowCfg.py
+++ b/util/dvsim/FlowCfg.py
@@ -62,6 +62,10 @@
         # a special key 'use_cfgs' within the hjson cfg.
         self.is_master_cfg = False
 
+        # For a master cfg, it is the aggregated list of all deploy objects under self.cfgs.
+        # For a non-master cfg, it is the list of items slated for dispatch.
+        self.deploy = []
+
         # Timestamp
         self.ts_format_long = args.ts_format_long
         self.timestamp_long = args.timestamp_long
@@ -101,6 +105,12 @@
         '''
         return FlowCfg(flow_cfg_file, proj_root, args)
 
+    def kill(self):
+        '''kill running processes and jobs gracefully
+        '''
+        for item in self.deploy:
+            item.kill()
+
     def parse_flow_cfg(self, flow_cfg_file, is_entry_point=True):
         '''
         Parse the flow cfg hjson file. This is a private API used within the
diff --git a/util/dvsim/SimCfg.py b/util/dvsim/SimCfg.py
index e16a519..26fd431 100644
--- a/util/dvsim/SimCfg.py
+++ b/util/dvsim/SimCfg.py
@@ -93,7 +93,6 @@
         self.links = {}
         self.build_list = []
         self.run_list = []
-        self.deploy = []
         self.cov_merge_deploy = None
         self.cov_report_deploy = None
         self.results_summary = OrderedDict()
@@ -165,6 +164,13 @@
         '''
         return SimCfg(flow_cfg_file, proj_root, args)
 
+    def kill(self):
+        '''kill running processes and jobs gracefully
+        '''
+        super().kill()
+        for item in self.cov_deploys:
+            item.kill()
+
     # Purge the output directories. This operates on self.
     def _purge(self):
         if self.scratch_path:
diff --git a/util/dvsim/dvsim.py b/util/dvsim/dvsim.py
index ef9b1a1..55128e7 100755
--- a/util/dvsim/dvsim.py
+++ b/util/dvsim/dvsim.py
@@ -18,6 +18,8 @@
 import os
 import subprocess
 import sys
+from pathlib import Path
+from signal import SIGINT, signal
 
 import Deploy
 import LintCfg
@@ -100,6 +102,14 @@
     return (proj_root)
 
 
+def sigint_handler(signal_received, frame):
+    # Kill processes and background jobs.
+    log.debug('SIGINT or CTRL-C detected. Exiting gracefully')
+    cfg.kill()
+    log.info('Exit due to SIGINT or CTRL-C ')
+    exit(1)
+
+
 def main():
     parser = argparse.ArgumentParser(
         description=__doc__,
@@ -481,6 +491,7 @@
     else:
         proj_root = get_proj_root()
 
+    global cfg
     # TODO: SimCfg item below implies DV - need to solve this once we add FPV
     # and other ASIC flow targets.
     if args.tool in ['ascentlint', 'veriblelint']:
@@ -489,6 +500,8 @@
         cfg = SynCfg.SynCfg(args.cfg, proj_root, args)
     else:
         cfg = SimCfg.SimCfg(args.cfg, proj_root, args)
+    # Handle Ctrl-C exit.
+    signal(SIGINT, sigint_handler)
 
     # List items available for run if --list switch is passed, and exit.
     if args.list != []:
