diff options
Diffstat (limited to 'Userland/Libraries/LibCore')
-rw-r--r-- | Userland/Libraries/LibCore/CMakeLists.txt | 1 | ||||
-rw-r--r-- | Userland/Libraries/LibCore/Process.cpp | 36 | ||||
-rw-r--r-- | Userland/Libraries/LibCore/Process.h | 18 |
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); +}; + +} |