tiny.sys.process.inspect
Defined in process.
API (25)
Actions
Public operations.
Start.tokengroupRunning: Reports whether any member ofgroup_id, its leader included, still runs.parseStartToken
Types and contracts
Public types and contracts.
Values and defaults
Public values and defaults.
cgroupchildrencommandcwdenvironmentexistsfdFlockfdPathfdsgrouphostnameinfolistnamepidNamespacerequired_capabilities
Source
Source: lib/sys/src/process/inspect/types.zig:15
zig
pub const DarwinTime = struct { seconds: u64, microseconds: u64,};Source: lib/sys/src/process/inspect/types.zig:3
zig
pub const Error = error{ UnsupportedPlatform, ProcessNotFound, PermissionDenied, BufferTooSmall, InvalidData, QueryFailed,};Source: lib/sys/src/process/inspect/types.zig:64
zig
pub const Info = struct { parent_pid: ProcessId, start: Start, alive: bool, resident_bytes: ?u64,};Source: lib/sys/src/process/inspect/types.zig:20
zig
pub const Start = union(enum) { linux_ticks: u64, darwin_time: DarwinTime, pub fn token(self: Start, storage: []u8) Error![]const u8 { return switch (self) { .linux_ticks => |ticks| std.fmt.bufPrint( storage, "proc:{d}", .{ticks}, ) catch error.BufferTooSmall, .darwin_time => |time| std.fmt.bufPrint( storage, "darwin:{d}:{d}", .{ time.seconds, time.microseconds }, ) catch error.BufferTooSmall, }; }};Source: lib/sys/src/process/inspect/census.zig:22
zig
/// Reports whether any member of `group_id`, its leader included, still runs./// A member that exited counts as gone while its parent or an adopting/// subreaper still owns the zombie entry, because an exited process holds no/// descriptor. Members that vanish during the scan count as gone. A process/// whose group or state cannot be read returns that error, so membership that/// cannot be established never reads as drained. The scan visits at most/// `storage.len` processes and refuses a larger table with `BufferTooSmall`./// On Linux a procfs that shows another pid namespace refuses with/// `QueryFailed`. Callers treat every error as possibly running.pub fn groupRunning( group_id: types.ProcessId, storage: []types.ProcessId,) types.Error!bool { if (group_id <= 1) return error.ProcessNotFound; if (comptime builtin.os.tag == .linux) { if (!try procfsSharesPidView()) return error.QueryFailed; } const processes = try backend.list(storage); for (processes) |pid| { const member_group = backend.group(pid) catch |err| switch (err) { error.ProcessNotFound => continue, else => return err, }; if (member_group != group_id) continue; const member = backend.info(pid) catch |err| switch (err) { error.ProcessNotFound => continue, else => return err, }; if (member.alive) return true; } return false;}Source: lib/sys/src/process/inspect/types.zig:13
zig
pub const Descriptor = i32;Source: lib/sys/src/process/inspect/types.zig:12
zig
pub const ProcessId = i32;Source: lib/sys/src/process/inspect/types.zig:40
zig
pub fn parseStartToken(value: []const u8) ?Start { const linux_prefix = "proc:"; if (std.mem.startsWith(u8, value, linux_prefix)) { const ticks = value[linux_prefix.len..]; if (ticks.len == 0) return null; return .{ .linux_ticks = std.fmt.parseUnsigned(u64, ticks, 10) catch return null, }; } const darwin_prefix = "darwin:"; if (!std.mem.startsWith(u8, value, darwin_prefix)) return null; const time = value[darwin_prefix.len..]; const separator = std.mem.indexOfScalar(u8, time, ':') orelse return null; const seconds = time[0..separator]; const microseconds = time[separator + 1 ..]; if (seconds.len == 0 or microseconds.len == 0 or std.mem.indexOfScalar(u8, microseconds, ':') != null) return null; return .{ .darwin_time = .{ .seconds = std.fmt.parseUnsigned(u64, seconds, 10) catch return null, .microseconds = std.fmt.parseUnsigned(u64, microseconds, 10) catch return null, } };}Source: lib/sys/src/process/inspect/root.zig
zig
const builtin = @import("builtin");const sys = @import("../../root.zig");const types = @import("types.zig");const backend = switch (builtin.os.tag) { .linux => @import("linux.zig"), .macos => @import("darwin.zig"), else => @import("unsupported.zig"),};pub const required_capabilities = sys.capabilities.host( &.{ .filesystem, .libc_interop, .process },);pub const Error = types.Error;pub const ProcessId = types.ProcessId;pub const Descriptor = types.Descriptor;pub const DarwinTime = types.DarwinTime;pub const Start = types.Start;pub const Info = types.Info;pub const parseStartToken = types.parseStartToken;pub const list = backend.list;pub const children = backend.children;pub const info = backend.info;pub const group = backend.group;pub const exists = backend.exists;pub const name = backend.name;pub const fds = backend.fds;pub const fdPath = backend.fdPath;pub const fdFlock = backend.fdFlock;pub const cwd = backend.cwd;pub const command = backend.command;pub const environment = backend.environment;pub const hostname = backend.hostname;pub const pidNamespace = backend.pidNamespace;pub const cgroup = backend.cgroup;pub const groupRunning = @import("census.zig").groupRunning;Source: lib/sys/src/process/root.zig:5
zig
pub const inspect = @import("inspect/root.zig");Audit
| Definitions | 26 |
|---|---|
| Public names | 26 |
| Members | 14 |
| Version | 26.7.0 |
| Revision | daab053ee433 |