/* * Copyright (c) 2018-2020, Andreas Kling * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #pragma once #include #include #include struct CThreadStatistics { int tid; unsigned times_scheduled; unsigned ticks; unsigned syscall_count; unsigned inode_faults; unsigned zero_faults; unsigned cow_faults; unsigned unix_socket_read_bytes; unsigned unix_socket_write_bytes; unsigned ipv4_socket_read_bytes; unsigned ipv4_socket_write_bytes; unsigned file_read_bytes; unsigned file_write_bytes; String state; u32 priority; u32 effective_priority; String name; }; struct CProcessStatistics { // Keep this in sync with /proc/all. // From the kernel side: pid_t pid; unsigned pgid; unsigned pgp; unsigned sid; uid_t uid; gid_t gid; pid_t ppid; unsigned nfds; String name; String tty; String pledge; size_t amount_virtual; size_t amount_resident; size_t amount_shared; size_t amount_dirty_private; size_t amount_clean_inode; size_t amount_purgeable_volatile; size_t amount_purgeable_nonvolatile; int icon_id; Vector threads; // synthetic String username; }; class CProcessStatisticsReader { public: static HashMap get_all(); private: static String username_from_uid(uid_t); static HashMap s_usernames; };