diff --git a/common/include/utils.hpp b/common/include/utils.hpp
new file mode 100644
index 0000000..928b136
--- /dev/null
+++ b/common/include/utils.hpp
@@ -0,0 +1,12 @@
+#pragma once
+
+#include <sdbusplus/async.hpp>
+
+/**
+ * @brief Asynchronously executes a shell command.
+ * @param ctx Async context for monitoring the pipe.
+ * @param cmd Shell command to execute.
+ * @return Task resolving to true on success (exit code 0), false otherwise.
+ */
+sdbusplus::async::task<bool> asyncSystem(sdbusplus::async::context& ctx,
+                                         const std::string& cmd);
diff --git a/common/meson.build b/common/meson.build
index 1e29ae8..8f515e1 100644
--- a/common/meson.build
+++ b/common/meson.build
@@ -9,6 +9,7 @@
     'src/software.cpp',
     'src/software_update.cpp',
     'src/host_power.cpp',
+    'src/utils.cpp',
     include_directories: ['.', 'include/', common_include],
     dependencies: [pdi_dep, phosphor_logging_dep, sdbusplus_dep, libpldm_dep],
 )
diff --git a/common/src/utils.cpp b/common/src/utils.cpp
new file mode 100644
index 0000000..683ca84
--- /dev/null
+++ b/common/src/utils.cpp
@@ -0,0 +1,79 @@
+#include "common/include/utils.hpp"
+
+#include <phosphor-logging/lg2.hpp>
+
+PHOSPHOR_LOG2_USING;
+
+sdbusplus::async::task<bool> asyncSystem(sdbusplus::async::context& ctx,
+                                         const std::string& cmd)
+{
+    int pipefd[2];
+    if (pipe(pipefd) == -1)
+    {
+        error("Failed to create pipe for command: {CMD}", "CMD", cmd);
+        co_return false;
+    }
+
+    pid_t pid = fork();
+    if (pid == 0)
+    {
+        close(pipefd[0]);
+
+        int exitCode = std::system(cmd.c_str());
+        ssize_t status = write(pipefd[1], &exitCode, sizeof(exitCode));
+
+        close(pipefd[1]);
+        _exit((status == sizeof(exitCode)) ? 0 : 1);
+    }
+    else if (pid > 0)
+    {
+        close(pipefd[1]);
+
+        auto fdio = std::make_unique<sdbusplus::async::fdio>(ctx, pipefd[0]);
+
+        if (!fdio)
+        {
+            error("Failed to create fdio for command: {CMD}", "CMD", cmd);
+            close(pipefd[0]);
+            co_return false;
+        }
+
+        co_await fdio->next();
+
+        int exitCode = -1;
+        ssize_t bytesRead = read(pipefd[0], &exitCode, sizeof(exitCode));
+        close(pipefd[0]);
+
+        if (bytesRead != sizeof(exitCode))
+        {
+            error("Failed to read exit code from command {CMD}", "CMD", cmd);
+            co_return false;
+        }
+
+        int status;
+        if (waitpid(pid, &status, 0) < 0)
+        {
+            error("waitpid failed for PID {PID} for command {CMD}", "PID", pid,
+                  "CMD", cmd);
+            co_return false;
+        }
+
+        if (exitCode != 0)
+        {
+            error("Command {CMD} exited with code {CODE}", "CMD", cmd, "CODE",
+                  exitCode);
+            co_return false;
+        }
+
+        debug("{CMD} executed successfully", "CMD", cmd);
+
+        co_return true;
+    }
+    else
+    {
+        error("Fork failed for command: {CMD}", "CMD", cmd);
+        close(pipefd[0]);
+        close(pipefd[1]);
+        co_return false;
+    }
+}
