diff --git a/utils.cpp b/utils.cpp
index 91857fc..204affa 100644
--- a/utils.cpp
+++ b/utils.cpp
@@ -88,54 +88,35 @@
 {
 
 /* @brief Helper function to build a string from command arguments */
-static std::string buildCommandStr(const char* name, char** args)
+static std::string buildCommandStr(char** args)
 {
-    std::string command = name;
+    std::string command = "";
     for (int i = 0; args[i]; i++)
     {
-        command += " ";
         command += args[i];
+        command += " ";
     }
     return command;
 }
 
-int executeCmd(const char* path, char** args)
+std::pair<int, std::string> executeCmd(char** args)
 {
-    pid_t pid = fork();
-    if (pid == 0)
+    std::array<char, 512> buffer;
+    std::string cmd = buildCommandStr(args);
+    std::stringstream result;
+    int rc;
+    FILE* pipe = popen(cmd.c_str(), "r");
+    if (!pipe)
     {
-        execv(path, args);
-
-        // execv only retruns on err
-        auto err = errno;
-        auto command = buildCommandStr(path, args);
-        error("Failed ({ERRNO}) to execute command: {COMMAND}", "ERRNO", err,
-              "COMMAND", command);
-        return -1;
+        error("Failed to execute command: {COMMAND}", "COMMAND", cmd);
+        return {-1, std::string{}};
     }
-    else if (pid > 0)
+    while (fgets(buffer.data(), buffer.size(), pipe) != nullptr)
     {
-        int status;
-        if (waitpid(pid, &status, 0) < 0)
-        {
-            error("Error ({ERRNO}) during waitpid.", "ERRNO", errno);
-            return -1;
-        }
-        else if (WEXITSTATUS(status) != 0)
-        {
-            auto command = buildCommandStr(path, args);
-            error("Error ({STATUS}) occurred when executing command: {COMMAND}",
-                  "STATUS", status, "COMMAND", command);
-            return -1;
-        }
+        result << buffer.data();
     }
-    else
-    {
-        error("Error ({ERRNO}) during fork.", "ERRNO", errno);
-        return -1;
-    }
-
-    return 0;
+    rc = pclose(pipe);
+    return {rc, result.str()};
 }
 
 } // namespace internal
