Kernel: Add function to enumerate processes in session
This commit is contained in:
@@ -47,6 +47,7 @@ namespace Kernel
|
|||||||
void exit(int status, int signal);
|
void exit(int status, int signal);
|
||||||
|
|
||||||
static void for_each_process(const BAN::Function<BAN::Iteration(Process&)>& callback);
|
static void for_each_process(const BAN::Function<BAN::Iteration(Process&)>& callback);
|
||||||
|
static void for_each_process_in_session(pid_t sid, const BAN::Function<BAN::Iteration(Process&)>& callback);
|
||||||
|
|
||||||
void add_thread(Thread*);
|
void add_thread(Thread*);
|
||||||
void on_thread_exit(Thread&);
|
void on_thread_exit(Thread&);
|
||||||
|
|||||||
@@ -36,6 +36,21 @@ namespace Kernel
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Process::for_each_process_in_session(pid_t sid, const BAN::Function<BAN::Iteration(Process&)>& callback)
|
||||||
|
{
|
||||||
|
LockGuard _(s_process_lock);
|
||||||
|
|
||||||
|
for (auto* process : s_processes)
|
||||||
|
{
|
||||||
|
if (process->sid() != sid)
|
||||||
|
continue;
|
||||||
|
auto ret = callback(*process);
|
||||||
|
if (ret == BAN::Iteration::Break)
|
||||||
|
return;
|
||||||
|
ASSERT(ret == BAN::Iteration::Continue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Process* Process::create_process(const Credentials& credentials, pid_t parent, pid_t sid, pid_t pgrp)
|
Process* Process::create_process(const Credentials& credentials, pid_t parent, pid_t sid, pid_t pgrp)
|
||||||
{
|
{
|
||||||
static pid_t s_next_id = 1;
|
static pid_t s_next_id = 1;
|
||||||
|
|||||||
Reference in New Issue
Block a user