Serenity Operating System
at master 38 lines 1.0 kB view raw
1/* 2 * Copyright (c) 2022, Lucas Chollet <lucas.chollet@free.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#include <Kernel/Process.h> 8#include <Kernel/Time/TimeManagement.h> 9 10namespace Kernel { 11 12ErrorOr<FlatPtr> Process::sys$getrusage(int who, Userspace<rusage*> user_usage) 13{ 14 VERIFY_PROCESS_BIG_LOCK_ACQUIRED(this); 15 16 rusage usage {}; 17 18 auto const ticks_per_second = TimeManagement::the().ticks_per_second(); 19 20 switch (who) { 21 case RUSAGE_SELF: 22 usage.ru_utime = Time::from_ticks(m_ticks_in_user, ticks_per_second).to_timeval(); 23 usage.ru_stime = Time::from_ticks(m_ticks_in_kernel, ticks_per_second).to_timeval(); 24 break; 25 case RUSAGE_CHILDREN: 26 usage.ru_utime = Time::from_ticks(m_ticks_in_user_for_dead_children, ticks_per_second).to_timeval(); 27 usage.ru_stime = Time::from_ticks(m_ticks_in_kernel_for_dead_children, ticks_per_second).to_timeval(); 28 break; 29 default: 30 return EINVAL; 31 } 32 33 TRY(copy_to_user(user_usage, &usage)); 34 35 return 0; 36} 37 38}