diff --git a/control/argument.cpp b/control/argument.cpp
index d9b832d..e014453 100644
--- a/control/argument.cpp
+++ b/control/argument.cpp
@@ -33,7 +33,7 @@
         if ((option == '?') || (option == 'h'))
         {
             usage(argv);
-            exit(-1);
+            exit(1);
         }
 
         auto i = &options[0];
diff --git a/control/gen-fan-zone-defs.py b/control/gen-fan-zone-defs.py
index 644ce54..e5aa39b 100755
--- a/control/gen-fan-zone-defs.py
+++ b/control/gen-fan-zone-defs.py
@@ -600,7 +600,7 @@
 
     if not args.zone_yaml or not args.fan_yaml:
         parser.print_usage()
-        sys.exit(-1)
+        sys.exit(1)
 
     with open(args.zone_yaml, 'r') as zone_input:
         zone_data = yaml.safe_load(zone_input) or {}
diff --git a/control/main.cpp b/control/main.cpp
index 80a7df6..8c13cf9 100644
--- a/control/main.cpp
+++ b/control/main.cpp
@@ -32,7 +32,7 @@
     if (argc != 2)
     {
         args.usage(argv);
-        exit(-1);
+        return 1;
     }
 
     Mode mode;
@@ -48,7 +48,7 @@
     else
     {
         args.usage(argv);
-        exit(-1);
+        return 1;
     }
 
     auto r = sd_event_default(&events);
@@ -56,7 +56,7 @@
     {
         log<level::ERR>("Failed call to sd_event_default()",
                         entry("ERROR=%s", strerror(-r)));
-        return -1;
+        return 1;
     }
 
     phosphor::fan::event::EventPtr eventPtr{events};
@@ -86,7 +86,7 @@
         }
     }
     //Log the useful metadata on these exceptions and let the app
-    //return -1 so it is restarted without a core dump.
+    //return 1 so it is restarted without a core dump.
     catch (phosphor::fan::util::DBusServiceError& e)
     {
         log<level::ERR>("Uncaught DBus service lookup failure exception",
@@ -110,5 +110,5 @@
                 entry("PROPERTY=%s", e.property.c_str()));
     }
 
-    return -1;
+    return 1;
 }
diff --git a/cooling-type/argument.cpp b/cooling-type/argument.cpp
index 2c9a580..2c54f75 100644
--- a/cooling-type/argument.cpp
+++ b/cooling-type/argument.cpp
@@ -34,7 +34,7 @@
         if ((option == '?') || (option == 'h'))
         {
             usage(argv);
-            exit(-1);
+            exit(1);
         }
 
         auto i = &options[0];
diff --git a/cooling-type/main.cpp b/cooling-type/main.cpp
index f690f80..3aa7d28 100644
--- a/cooling-type/main.cpp
+++ b/cooling-type/main.cpp
@@ -12,7 +12,7 @@
 
 int main(int argc, char* argv[])
 {
-    auto rc = -1;
+    auto rc = 1;
     auto options = ArgumentParser(argc, argv);
 
     auto objpath = (options)["path"];
@@ -57,7 +57,7 @@
                 else
                 {
                     log<level::ERR>("--event=<keycode> argument required\n");
-                    exit(-1);
+                    return rc;
                 }
             }
 
@@ -66,7 +66,6 @@
         }
         catch (DBusMethodError& dme)
         {
-            rc = -1;
             log<level::ERR>("Uncaught DBus method failure exception",
                     entry("BUSNAME=%s", dme.busName.c_str()),
                     entry("PATH=%s", dme.path.c_str()),
@@ -75,7 +74,6 @@
         }
         catch (std::exception& err)
         {
-            rc = -1;
             log<phosphor::logging::level::ERR>(err.what());
         }
 
diff --git a/evdevpp/test/evmon.cpp b/evdevpp/test/evmon.cpp
index 26163a7..526f759 100644
--- a/evdevpp/test/evmon.cpp
+++ b/evdevpp/test/evmon.cpp
@@ -40,7 +40,7 @@
         if ((option == '?') || (option == 'h'))
         {
             usage(argv);
-            exit(-1);
+            exit(1);
         }
 
         auto i = &options[0];
@@ -97,7 +97,7 @@
     ArgumentParser::usage(argv);
     std::cerr << "\n";
     std::cerr << "ERROR: " << err << "\n";
-    exit(-1);
+    exit(1);
 }
 
 } // namespace util
diff --git a/monitor/argument.cpp b/monitor/argument.cpp
index 2fbef68..c756649 100644
--- a/monitor/argument.cpp
+++ b/monitor/argument.cpp
@@ -33,7 +33,7 @@
         if ((option == '?') || (option == 'h'))
         {
             usage(argv);
-            exit(-1);
+            exit(1);
         }
 
         auto i = &options[0];
diff --git a/monitor/gen-fan-monitor-defs.py b/monitor/gen-fan-monitor-defs.py
index a5f225b..de25fef 100755
--- a/monitor/gen-fan-monitor-defs.py
+++ b/monitor/gen-fan-monitor-defs.py
@@ -126,7 +126,7 @@
 
     if not args.monitor_yaml:
         parser.print_usage()
-        sys.exit(-1)
+        sys.exit(1)
 
     with open(args.monitor_yaml, 'r') as monitor_input:
         monitor_data = yaml.safe_load(monitor_input) or {}
diff --git a/monitor/main.cpp b/monitor/main.cpp
index 84dd7d1..512e3f7 100644
--- a/monitor/main.cpp
+++ b/monitor/main.cpp
@@ -35,7 +35,7 @@
     if (argc != 2)
     {
         args.usage(argv);
-        exit(-1);
+        return 1;
     }
 
     Mode mode;
@@ -50,7 +50,7 @@
     else
     {
         args.usage(argv);
-        exit(-1);
+        return 1;
     }
 
     auto r = sd_event_default(&events);
@@ -58,7 +58,7 @@
     {
         log<level::ERR>("Failed call to sd_event_default()",
                         entry("ERROR=%s", strerror(-r)));
-        return -1;
+        return 1;
     }
 
     std::unique_ptr<phosphor::fan::trust::Manager> trust =
@@ -101,5 +101,5 @@
         }
     }
 
-    return -1;
+    return 1;
 }
