Vhex-kernel/src/kernel/scheduler/process/get.c

39 lines
630 B
C
Raw Normal View History

#include <kernel/scheduler.h>
#include <kernel/util/atomic.h>
2019-12-29 16:39:30 +01:00
struct process *process_get(pid_t pid)
2019-12-29 16:39:30 +01:00
{
extern struct process *proc_table;
struct process *proc;
2019-12-29 16:39:30 +01:00
// Check error
if (pid <= 0)
2019-12-29 16:39:30 +01:00
return (NULL);
// Start atomic operation
atomic_start();
// Proess table walk
proc = proc_table;
while (proc != NULL)
{
// Check target process
if (proc->pid != pid) {
proc = proc->next;
continue;
}
// Check if the process is alive
if (proc->status == PROC_DEAD)
proc = NULL;
// Stop atomic operations
atomic_stop();
return (proc);
}
// Stop atomic operation
atomic_stop();
return (NULL);
}