| /* libprocstat |
| Copyright 2015-2022 Rivoreo |
| |
| This program is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 2 of the License, or (at |
| your option) any later version. |
| |
| This program is distributed in the hope that it will be useful, but |
| WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| General Public License for more details. |
| */ |
| |
| #ifndef _PROCSTAT_H |
| #define _PROCSTAT_H |
| |
| #include <sys/types.h> |
| #include <stdint.h> |
| |
| #define PROC_STAT_COMM_MAX_LENGTH 16 |
| |
| struct procstat_handle; |
| |
| struct procstat { |
| pid_t pid; |
| pid_t ppid; |
| pid_t pgid; |
| pid_t tpgid; |
| pid_t sid; |
| pid_t tsid; |
| pid_t tgid; // Linux-specific |
| dev_t tty; |
| uid_t ruid; |
| uid_t euid; |
| gid_t rgid; |
| gid_t egid; |
| size_t size; |
| size_t rssize; |
| uintptr_t wchan; |
| uintptr_t ip; |
| int is_kernel_process; |
| #if 0 |
| uint64_t user_time; |
| uint64_t kernel_time; |
| uint64_t child_user_time; |
| uint64_t child_kernel_time; |
| #else |
| uint64_t time; |
| uint64_t child_time; |
| #endif |
| uint64_t start_time; |
| int num_threads; |
| char state; |
| int on_psr; |
| long int priority; // Platform-dependent |
| signed char nice; // Platform-dependent |
| unsigned int rt_priority; // Platform-dependent |
| unsigned int sched_class; // Platform-dependent |
| char comm[PROC_STAT_COMM_MAX_LENGTH]; |
| //char command_line[0]; |
| }; |
| |
| #define PROCSTAT_MAIN_THREAD_INFO (1 << 0) |
| |
| #define PROCSTAT_WALK_ALL 0 /* May containing thread information on Linux */ |
| #define PROCSTAT_WALK_THREADS 1 |
| #define PROCSTAT_WALK_KERNEL 2 |
| #define PROCSTAT_WALK_USER 3 |
| |
| struct procstat_handle *procstat_open(void); |
| void procstat_close(struct procstat_handle *); |
| int procstat_get(struct procstat_handle *, pid_t, int, struct procstat *); |
| int procstat_get_command_line(struct procstat_handle *, pid_t, char **); |
| int procstat_get_argv(struct procstat_handle *, pid_t, int *, char ***); |
| int procstat_get_path(struct procstat_handle *, pid_t, char **); |
| int procstat_get_mac_label(struct procstat_handle *, pid_t, char **); |
| void procstat_walk(struct procstat_handle *, int, int, int (*)(struct procstat_handle *, struct procstat *, void *), void *); |
| |
| #endif |