diff --git a/src/libcamera/process.cpp b/src/libcamera/process.cpp
index bc9833f4..86a887fb 100644
--- a/src/libcamera/process.cpp
+++ b/src/libcamera/process.cpp
@@ -12,6 +12,7 @@
 #include <fcntl.h>
 #include <list>
 #include <signal.h>
+#include <stdio.h>
 #include <string.h>
 #include <sys/socket.h>
 #include <sys/types.h>
@@ -259,7 +260,15 @@ int Process::start(const std::string &path,
 		if (isolate())
 			_exit(EXIT_FAILURE);
 
-		closeAllFdsExcept(fds);
+		std::vector<int> v(fds);
+		v.push_back(STDERR_FILENO);
+		closeAllFdsExcept(v);
+
+		UniqueFD fd(::open("/dev/null", O_RDWR));
+		if (fd.isValid()) {
+			dup2(fd.get(), STDIN_FILENO);
+			dup2(fd.get(), STDOUT_FILENO);
+		}
 
 		const char *file = utils::secure_getenv("LIBCAMERA_LOG_FILE");
 		if (file && strcmp(file, "syslog"))
