MOS Source Code
Loading...
Searching...
No Matches
process.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: GPL-3.0-or-later
2
3#pragma once
4
5#include "mos/io/io.hpp"
6
7#include <mos/hashmap.hpp>
9#include <optional>
10
11typedef struct _hashmap hashmap_t;
12
16typedef struct
17{
18 io_t *in, *out, *err;
19} stdio_t;
20
22
23const char *get_vmap_type_str(vmap_type_t type);
24
26{
27 if (const auto ptr = process)
28 return ptr->magic == PROCESS_MAGIC_PROC;
29 else
30 return false;
31}
32
34{
35 return {
36 .in = current_process->files[0].io,
37 .out = current_process->files[1].io,
38 .err = current_process->files[2].io,
39 };
40}
41
42void process_destroy(Process *process);
43
45std::optional<Process *> process_get(pid_t pid);
46
47fd_t process_attach_ref_fd(Process *process, io_t *file, fd_flags_t flags);
48io_t *process_get_fd(Process *process, fd_t fd);
49bool process_detach_fd(Process *process, fd_t fd);
50
51pid_t process_wait_for_pid(pid_t pid, u32 *exit_code, u32 flags);
52
53[[noreturn]] void process_exit(Process *&&proc, u8 exit_code, signal_t signal);
54
55void process_dump_mmaps(const Process *process);
56
57bool process_register_signal_handler(Process *process, signal_t sig, const sigaction_t *sigaction);
58
60long process_do_execveat(fd_t dirfd, const char *path, const char *const argv[], const char *const envp[], int flags);
fd_flags_t
Definition fs_types.h:47
vmap_type_t
Definition mm.hpp:31
#define PROCESS_MAGIC_PROC
const char ** argv
Definition kmain.cpp:34
#define should_inline
Definition mos_global.h:37
basic_string_view< char > string_view
#define current_process
Definition platform.hpp:33
void process_exit(Process *&&proc, u8 exit_code, signal_t signal)
Definition process.cpp:284
pid_t process_wait_for_pid(pid_t pid, u32 *exit_code, u32 flags)
Definition process.cpp:216
fd_t process_attach_ref_fd(Process *process, io_t *file, fd_flags_t flags)
Definition process.cpp:172
long process_do_execveat(fd_t dirfd, const char *path, const char *const argv[], const char *const envp[], int flags)
Definition execve.cpp:18
Process * process_do_fork(Process *process)
Definition fork.cpp:24
should_inline stdio_t current_stdio(void)
Definition process.hpp:33
Process * process_new(Process *parent, mos::string_view name, const stdio_t *ios)
Definition process.cpp:137
should_inline bool process_is_valid(const Process *process)
Definition process.hpp:25
const char * get_vmap_type_str(vmap_type_t type)
Definition process.cpp:51
void process_dump_mmaps(const Process *process)
Definition process.cpp:368
void process_destroy(Process *process)
Definition process.cpp:106
mos::HashMap< pid_t, Process * > ProcessTable
Definition process.cpp:36
bool process_register_signal_handler(Process *process, signal_t sig, const sigaction_t *sigaction)
Definition process.cpp:383
std::optional< Process * > process_get(pid_t pid)
Definition process.cpp:161
bool process_detach_fd(Process *process, fd_t fd)
Definition process.cpp:201
io_t * process_get_fd(Process *process, fd_t fd)
Definition process.cpp:193
mos::shared_ptr< T > ptr
int signal_t
const char * name
Definition slab.cpp:35
Definition io.hpp:48
A wrapper type for the standard I/O streams.
Definition process.hpp:17
io_t * err
Definition process.hpp:18
io_t * out
Definition process.hpp:18
io_t * in
Definition process.hpp:18
unsigned int u32
Definition types.h:17
s32 fd_t
Definition types.h:77
s32 pid_t
Definition types.h:74
unsigned char u8
Definition types.h:15