aboutsummaryrefslogtreecommitdiff
path: root/works/life/linux-run/linux-run.h
diff options
context:
space:
mode:
authorYuqian Yang <crupest@crupest.life>2025-02-12 15:55:21 +0800
committerYuqian Yang <crupest@crupest.life>2025-02-12 15:55:21 +0800
commit10eb95869601e145b1d8bc909424777c25752d51 (patch)
tree49449a4076ded9bd937a51679318edbe2a532cae /works/life/linux-run/linux-run.h
parent29ba3e88b1a7425fe00af0005b8a8228103aa21c (diff)
parentf8c10dd1fc55e60f35286475356e48c4f642eb63 (diff)
downloadcrupest-10eb95869601e145b1d8bc909424777c25752d51.tar.gz
crupest-10eb95869601e145b1d8bc909424777c25752d51.tar.bz2
crupest-10eb95869601e145b1d8bc909424777c25752d51.zip
import(life): IMPORT crupest/life COMPLETE.
Diffstat (limited to 'works/life/linux-run/linux-run.h')
-rw-r--r--works/life/linux-run/linux-run.h43
1 files changed, 43 insertions, 0 deletions
diff --git a/works/life/linux-run/linux-run.h b/works/life/linux-run/linux-run.h
new file mode 100644
index 0000000..d953115
--- /dev/null
+++ b/works/life/linux-run/linux-run.h
@@ -0,0 +1,43 @@
+#ifndef LINUX_RUN_H
+#define LINUX_RUN_H
+
+#include <functional>
+#include <stdexcept>
+#include <string>
+#include <vector>
+
+namespace linux_run {
+
+enum StopReason { Exited, Killed };
+
+struct RunOptions {
+ RunOptions()
+ : timeout_in_second(0), check_exit_code(true), stop_reason(nullptr),
+ exit_code(nullptr) {}
+
+ int timeout_in_second;
+ bool check_exit_code;
+ std::string stdin_file_path;
+ std::string stdout_file_path;
+ StopReason *stop_reason;
+ int *exit_code;
+ // Before reap so you can get final information of the process.
+ std::function<void(int pid)> before_reap_callback;
+};
+
+class TimeoutError : std::runtime_error {
+public:
+ using runtime_error::runtime_error;
+};
+
+class ExitCodeError : std::runtime_error {
+public:
+ using runtime_error::runtime_error;
+};
+
+void run(const std::string &program, std::vector<std::string> arguments,
+ RunOptions options);
+
+} // namespace linux_run
+
+#endif