summaryrefslogtreecommitdiff
path: root/src/libcamera/include/process.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libcamera/include/process.h')
-rw-r--r--src/libcamera/include/process.h55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/libcamera/include/process.h b/src/libcamera/include/process.h
new file mode 100644
index 00000000..d322fce1
--- /dev/null
+++ b/src/libcamera/include/process.h
@@ -0,0 +1,55 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2019, Google Inc.
+ *
+ * process.h - Process object
+ */
+#ifndef __LIBCAMERA_PROCESS_H__
+#define __LIBCAMERA_PROCESS_H__
+
+#include <string>
+#include <vector>
+
+#include <libcamera/event_notifier.h>
+
+namespace libcamera {
+
+class Process final
+{
+public:
+ enum ExitStatus {
+ NotExited,
+ NormalExit,
+ SignalExit,
+ };
+
+ Process();
+ ~Process();
+
+ int start(const std::string &path,
+ const std::vector<std::string> &args = std::vector<std::string>(),
+ const std::vector<int> &fds = std::vector<int>());
+
+ ExitStatus exitStatus() const { return exitStatus_; }
+ int exitCode() const { return exitCode_; }
+
+ void kill();
+
+ Signal<Process *, enum ExitStatus, int> finished;
+
+private:
+ void closeAllFdsExcept(const std::vector<int> &fds);
+ int isolate();
+ void died(int wstatus);
+
+ pid_t pid_;
+ bool running_;
+ enum ExitStatus exitStatus_;
+ int exitCode_;
+
+ friend class ProcessManager;
+};
+
+} /* namespace libcamera */
+
+#endif /* __LIBCAMERA_PROCESS_H__ */