diff --git a/api/GenApi.py b/api/GenApi.py
index 93e2ae964bdcf830f16c423cef5fa6d627ed4bed..9f3020355d5226e4743ce0a47bd27dfae7f00823 100644
--- a/api/GenApi.py
+++ b/api/GenApi.py
@@ -1005,7 +1005,7 @@ from math import pi
 
 __version__ = {5}_API_VERSION
 
-signal.signal(signal.SIGINT, signal.SIG_DFL)
+oldsig = signal.signal(signal.SIGINT, signal.SIG_DFL)
 libdir = os.path.dirname(os.path.realpath(__file__))
 if platform.system() == "Windows":
     libpath = os.path.join(libdir, "{6}-{3}.{4}.dll")
@@ -1386,6 +1386,8 @@ class API:
                     (",\n" + indent + "    ").join(
                         tuple((a.python_arg
                                for a in args)) + ("byref(ierr)", )) + ")\n")
+            if name == "finalize": # special case for finalize() function
+                f.write(indent + "signal.signal(signal.SIGINT, oldsig)\n")
             f.write(indent + "if ierr.value != 0:\n")
             f.write(indent + "    raise ValueError(\n")
             f.write(indent + '        "' + c_name +
diff --git a/api/gmsh.py b/api/gmsh.py
index 67fc598ad34e34ac5ba22e16738d816e01fcf580..6e370e80bb068fd2a251e13b5eef160656ea760e 100644
--- a/api/gmsh.py
+++ b/api/gmsh.py
@@ -24,7 +24,7 @@ GMSH_API_VERSION_MINOR = 6
 
 __version__ = GMSH_API_VERSION
 
-signal.signal(signal.SIGINT, signal.SIG_DFL)
+oldsig = signal.signal(signal.SIGINT, signal.SIG_DFL)
 libdir = os.path.dirname(os.path.realpath(__file__))
 if platform.system() == "Windows":
     libpath = os.path.join(libdir, "gmsh-4.6.dll")
@@ -212,6 +212,7 @@ def finalize():
     ierr = c_int()
     lib.gmshFinalize(
         byref(ierr))
+    signal.signal(signal.SIGINT, oldsig)
     if ierr.value != 0:
         raise ValueError(
             "gmshFinalize returned non-zero error code: ",