From 5582d20f044c6891038d20d6057c61a3df829714 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 c0e22e447f..7d38d43b67 100644 --- a/lib/std/os/bits/linux.zig +++ b/lib/std/os/bits/linux.zig @@ -203,6 +203,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 cf6b52bace..3d437359c2 100644 --- a/lib/std/os/linux.zig +++ b/lib/std/os/linux.zig @@ -705,6 +705,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); }