diff --git a/Kernel/Tasks/Process.cpp b/Kernel/Tasks/Process.cpp index ffeb4a0055..6f78745af2 100644 --- a/Kernel/Tasks/Process.cpp +++ b/Kernel/Tasks/Process.cpp @@ -291,7 +291,7 @@ ErrorOr Process::create(NonnullOwnPtr n auto exec_unveil_tree = UnveilNode { TRY(KString::try_create("/"sv)), UnveilMetadata(TRY(KString::try_create("/"sv))) }; auto credentials = TRY(Credentials::create(uid, gid, uid, gid, uid, gid, {}, fork_parent ? fork_parent->sid() : 0, fork_parent ? fork_parent->pgid() : 0)); - auto process = TRY(adopt_nonnull_ref_or_enomem(new (nothrow) Process(move(name), move(credentials), ppid, is_kernel_process, move(current_directory), move(executable), tty, move(unveil_tree), move(exec_unveil_tree)))); + auto process = TRY(adopt_nonnull_ref_or_enomem(new (nothrow) Process(move(name), move(credentials), ppid, is_kernel_process, move(current_directory), move(executable), tty, move(unveil_tree), move(exec_unveil_tree), kgettimeofday()))); OwnPtr new_address_space; if (fork_parent) { @@ -308,11 +308,12 @@ ErrorOr Process::create(NonnullOwnPtr n return ProcessAndFirstThread { move(process), move(first_thread) }; } -Process::Process(NonnullOwnPtr name, NonnullRefPtr credentials, ProcessID ppid, bool is_kernel_process, RefPtr current_directory, RefPtr executable, RefPtr tty, UnveilNode unveil_tree, UnveilNode exec_unveil_tree) +Process::Process(NonnullOwnPtr name, NonnullRefPtr credentials, ProcessID ppid, bool is_kernel_process, RefPtr current_directory, RefPtr executable, RefPtr tty, UnveilNode unveil_tree, UnveilNode exec_unveil_tree, UnixDateTime creation_time) : m_name(move(name)) , m_is_kernel_process(is_kernel_process) , m_executable(move(executable)) , m_current_directory(move(current_directory)) + , m_creation_time(creation_time) , m_unveil_data(move(unveil_tree)) , m_exec_unveil_data(move(exec_unveil_tree)) , m_wait_blocker_set(*this) diff --git a/Kernel/Tasks/Process.h b/Kernel/Tasks/Process.h index 19ebfbb813..91cb1927a8 100644 --- a/Kernel/Tasks/Process.h +++ b/Kernel/Tasks/Process.h @@ -482,6 +482,8 @@ public: RefPtr executable(); RefPtr executable() const; + UnixDateTime creation_time() const { return m_creation_time; }; + static constexpr size_t max_arguments_size = Thread::default_userspace_stack_size / 8; static constexpr size_t max_environment_size = Thread::default_userspace_stack_size / 8; static constexpr size_t max_auxiliary_size = Thread::default_userspace_stack_size / 8; @@ -608,7 +610,7 @@ private: bool add_thread(Thread&); bool remove_thread(Thread&); - Process(NonnullOwnPtr name, NonnullRefPtr, ProcessID ppid, bool is_kernel_process, RefPtr current_directory, RefPtr executable, RefPtr tty, UnveilNode unveil_tree, UnveilNode exec_unveil_tree); + Process(NonnullOwnPtr name, NonnullRefPtr, ProcessID ppid, bool is_kernel_process, RefPtr current_directory, RefPtr executable, RefPtr tty, UnveilNode unveil_tree, UnveilNode exec_unveil_tree, UnixDateTime creation_time); static ErrorOr create(NonnullOwnPtr name, UserID, GroupID, ProcessID ppid, bool is_kernel_process, RefPtr current_directory = nullptr, RefPtr executable = nullptr, RefPtr = nullptr, Process* fork_parent = nullptr); ErrorOr> attach_resources(NonnullOwnPtr&&, Process* fork_parent); static ProcessID allocate_pid(); @@ -856,6 +858,8 @@ private: SpinlockProtected, LockRank::None> m_current_directory; + UnixDateTime const m_creation_time; + Vector> m_arguments; Vector> m_environment;