summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibCore
diff options
context:
space:
mode:
Diffstat (limited to 'Userland/Libraries/LibCore')
-rw-r--r--Userland/Libraries/LibCore/CMakeLists.txt1
-rw-r--r--Userland/Libraries/LibCore/Process.cpp36
-rw-r--r--Userland/Libraries/LibCore/Process.h18
3 files changed, 55 insertions, 0 deletions
diff --git a/Userland/Libraries/LibCore/CMakeLists.txt b/Userland/Libraries/LibCore/CMakeLists.txt
index adafbcc559..1bf5af2204 100644
--- a/Userland/Libraries/LibCore/CMakeLists.txt
+++ b/Userland/Libraries/LibCore/CMakeLists.txt
@@ -21,6 +21,7 @@ set(SOURCES
NetworkResponse.cpp
Notifier.cpp
Object.cpp
+ Process.cpp
ProcessStatisticsReader.cpp
Property.cpp
Socket.cpp
diff --git a/Userland/Libraries/LibCore/Process.cpp b/Userland/Libraries/LibCore/Process.cpp
new file mode 100644
index 0000000000..9d01b86306
--- /dev/null
+++ b/Userland/Libraries/LibCore/Process.cpp
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2021, Andreas Kling <kling@serenityos.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#include <AK/String.h>
+#include <LibCore/Process.h>
+#include <errno.h>
+#include <spawn.h>
+#include <unistd.h>
+
+#ifdef __serenity__
+# include <serenity.h>
+#endif
+
+namespace Core {
+
+pid_t Process::spawn(StringView path)
+{
+ String path_string = path;
+
+ pid_t pid;
+ char const* argv[] = { path_string.characters(), nullptr };
+ if ((errno = posix_spawn(&pid, path_string.characters(), nullptr, nullptr, const_cast<char**>(argv), environ))) {
+ perror("Process::spawn posix_spawn");
+ } else {
+#ifdef __serenity__
+ if (disown(pid) < 0)
+ perror("Process::spawn disown");
+#endif
+ }
+ return pid;
+}
+
+}
diff --git a/Userland/Libraries/LibCore/Process.h b/Userland/Libraries/LibCore/Process.h
new file mode 100644
index 0000000000..79820451e2
--- /dev/null
+++ b/Userland/Libraries/LibCore/Process.h
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2021, Andreas Kling <kling@serenityos.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#pragma once
+
+#include <AK/Forward.h>
+
+namespace Core {
+
+class Process {
+public:
+ static pid_t spawn(StringView path);
+};
+
+}