123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- package darwin
- import "base:intrinsics"
- import "core:sys/posix"
- foreign import lib "system:System.framework"
- // Incomplete bindings to the proc API on MacOS, add to when needed.
- foreign lib {
- proc_pidinfo :: proc(pid: posix.pid_t, flavor: PID_Info_Flavor, arg: i64, buffer: rawptr, buffersize: i32) -> i32 ---
- proc_pidpath :: proc(pid: posix.pid_t, buffer: [^]byte, buffersize: u32) -> i32 ---
- proc_listallpids :: proc(buffer: [^]i32, buffersize: i32) -> i32 ---
- proc_pid_rusage :: proc(pid: posix.pid_t, flavor: Pid_Rusage_Flavor, buffer: rawptr) -> i32 ---
- }
- MAXCOMLEN :: 16
- proc_bsdinfo :: struct {
- pbi_flags: PBI_Flags,
- pbi_status: u32,
- pbi_xstatus: u32,
- pbi_pid: u32,
- pbi_ppid: u32,
- pbi_uid: posix.uid_t,
- pbi_gid: posix.gid_t,
- pbi_ruid: posix.uid_t,
- pbi_rgid: posix.gid_t,
- pbi_svuid: posix.uid_t,
- pbi_svgid: posix.gid_t,
- rfu_1: u32,
- pbi_comm: [MAXCOMLEN]byte `fmt:"s,0"`,
- pbi_name: [2 * MAXCOMLEN]byte `fmt:"s,0"`,
- pbi_nfiles: u32,
- pbi_pgid: u32,
- pbi_pjobc: u32,
- e_tdev: u32,
- e_tpgid: u32,
- pbi_nice: i32,
- pbi_start_tvsec: u64,
- pbi_start_tvusec: u64,
- }
- proc_bsdshortinfo :: struct {
- pbsi_pid: u32,
- pbsi_ppid: u32,
- pbsi_pgid: u32,
- pbsi_status: u32,
- pbsi_comm: [MAXCOMLEN]byte `fmt:"s,0"`,
- pbsi_flags: PBI_Flags,
- pbsi_uid: posix.uid_t,
- pbsi_gid: posix.gid_t,
- pbsi_ruid: posix.uid_t,
- pbsi_rgid: posix.gid_t,
- pbsi_svuid: posix.uid_t,
- pbsi_svgid: posix.gid_t,
- pbsi_rfu: u32,
- }
- proc_vnodepathinfo :: struct {
- pvi_cdir: vnode_info_path,
- pvi_rdir: vnode_info_path,
- }
- vnode_info_path :: struct {
- vip_vi: vnode_info,
- vip_path: [posix.PATH_MAX]byte,
- }
- vnode_info :: struct {
- vi_stat: vinfo_stat,
- vi_type: i32,
- vi_pad: i32,
- vi_fsid: fsid_t,
- }
- vinfo_stat :: struct {
- vst_dev: u32,
- vst_mode: u16,
- vst_nlink: u16,
- vst_ino: u64,
- vst_uid: posix.uid_t,
- vst_gid: posix.gid_t,
- vst_atime: i64,
- vst_atimensec: i64,
- vst_mtime: i64,
- vst_mtimensec: i64,
- vst_ctime: i64,
- vst_ctimensec: i64,
- vst_birthtime: i64,
- vst_birthtimensec: i64,
- vst_size: posix.off_t,
- vst_blocks: i64,
- vst_blksize: i32,
- vst_flags: u32,
- vst_gen: u32,
- vst_rdev: u32,
- vst_qspare: [2]i64,
- }
- proc_taskinfo :: struct {
- pti_virtual_size: u64 `fmt:"M"`,
- pti_resident_size: u64 `fmt:"M"`,
- pti_total_user: u64,
- pti_total_system: u64,
- pti_threads_user: u64,
- pti_threads_system: u64,
- pti_policy: i32,
- pti_faults: i32,
- pti_pageins: i32,
- pti_cow_faults: i32,
- pti_messages_sent: i32,
- pti_messages_received: i32,
- pti_syscalls_mach: i32,
- pti_syscalls_unix: i32,
- pti_csw: i32,
- pti_threadnum: i32,
- pti_numrunning: i32,
- pti_priority: i32,
- }
- proc_taskallinfo :: struct {
- pbsd: proc_bsdinfo,
- ptinfo: proc_taskinfo,
- }
- fsid_t :: distinct [2]i32
- PBI_Flag_Bits :: enum u32 {
- SYSTEM = intrinsics.constant_log2(0x0001),
- TRACED = intrinsics.constant_log2(0x0002),
- INEXIT = intrinsics.constant_log2(0x0004),
- PWAIT = intrinsics.constant_log2(0x0008),
- LP64 = intrinsics.constant_log2(0x0010),
- SLEADER = intrinsics.constant_log2(0x0020),
- CTTY = intrinsics.constant_log2(0x0040),
- CONTROLT = intrinsics.constant_log2(0x0080),
- THCWD = intrinsics.constant_log2(0x0100),
- PC_THROTTLE = intrinsics.constant_log2(0x0200),
- PC_SUSP = intrinsics.constant_log2(0x0400),
- PC_KILL = intrinsics.constant_log2(0x0600),
- PA_THROTTLE = intrinsics.constant_log2(0x0800),
- PA_SUSP = intrinsics.constant_log2(0x1000),
- PA_PSUGID = intrinsics.constant_log2(0x2000),
- EXEC = intrinsics.constant_log2(0x4000),
- }
- PBI_Flags :: bit_set[PBI_Flag_Bits; u32]
- PID_Info_Flavor :: enum i32 {
- LISTFDS = 1,
- TASKALLINFO,
- BSDINFO,
- TASKINFO,
- THREADINFO,
- LISTTHREADS,
- REGIONINFO,
- REGIONPATHINFO,
- VNODEPATHINFO,
- THREADPATHINFO,
- PATHINFO,
- WORKQUEUEINFO,
- SHORTBSDINFO,
- LISTFILEPORTS,
- THREADID64INFO,
- RUSAGE,
- }
- PIDPATHINFO_MAXSIZE :: 4*posix.PATH_MAX
- Pid_Rusage_Flavor :: enum i32 {
- V0,
- V1,
- V2,
- V3,
- V4,
- V5,
- }
- rusage_info_v0 :: struct {
- ri_uuid: [16]u8,
- ri_user_time: u64,
- ri_system_time: u64,
- ri_pkg_idle_wkups: u64,
- ri_interrupt_wkups: u64,
- ri_pageins: u64,
- ri_wired_size: u64,
- ri_resident_size: u64,
- ri_phys_footprint: u64,
- ri_proc_start_abstime: u64,
- ri_proc_exit_abstime: u64,
- }
|