From a3703745eb21923b96e807b9163d303b8e4447b7 Mon Sep 17 00:00:00 2001 From: Malcolm Still Date: Sat, 10 Jul 2021 21:56:41 +0100 Subject: [PATCH] Add waitid syscall on linux (#9335) --- lib/std/os/bits/linux.zig | 9 +++++++++ lib/std/os/linux.zig | 4 ++++ 2 files changed, 13 insertions(+) diff --git a/lib/std/os/bits/linux.zig b/lib/std/os/bits/linux.zig index 7501d54bbe..69fdbc84fb 100644 --- a/lib/std/os/bits/linux.zig +++ b/lib/std/os/bits/linux.zig @@ -204,6 +204,15 @@ pub const WEXITED = 4; pub const WCONTINUED = 8; pub const WNOWAIT = 0x1000000; +// waitid id types +pub const P = enum(c_uint) { + ALL = 0, + PID = 1, + PGID = 2, + PIDFD = 3, + _, +}; + pub usingnamespace if (is_mips) struct { pub const SA_NOCLDSTOP = 1; diff --git a/lib/std/os/linux.zig b/lib/std/os/linux.zig index 26f489a345..ef7c0ff077 100644 --- a/lib/std/os/linux.zig +++ b/lib/std/os/linux.zig @@ -710,6 +710,10 @@ pub fn waitpid(pid: pid_t, status: *u32, flags: u32) usize { return syscall4(.wait4, @bitCast(usize, @as(isize, pid)), @ptrToInt(status), flags, 0); } +pub fn waitid(id_type: P, id: i32, infop: *siginfo_t, flags: u32) usize { + return syscall5(.waitid, @enumToInt(id_type), @bitCast(usize, @as(isize, id)), @ptrToInt(infop), flags, 0); +} + pub fn fcntl(fd: fd_t, cmd: i32, arg: usize) usize { return syscall3(.fcntl, @bitCast(usize, @as(isize, fd)), @bitCast(usize, @as(isize, cmd)), arg); }