diff --git a/lib/std/c.zig b/lib/std/c.zig index f6398720bf2e2ae509377f3c911b09d6d1d9e4b3..67da8ba5d156e818699196d00f43cde991663ee2 100644 --- a/lib/std/c.zig +++ b/lib/std/c.zig @@ -9351,6 +9351,7 @@ pub extern "c" fn setlogmask(maskpri: c_int) c_int; pub extern "c" fn if_nametoindex([*:0]const u8) c_int; pub extern "c" fn getpid() pid_t; +pub extern "c" fn getppid() pid_t; /// These are implementation defined but share identical values in at least musl and glibc: /// - https://git.musl-libc.org/cgit/musl/tree/include/locale.h?id=ab31e9d6a0fa7c5c408856c89df2dfb12c344039#n18 diff --git a/lib/std/os/linux.zig b/lib/std/os/linux.zig index 35b20c9fa054c77fad0a818d6346a8968dc944c0..a5a82c2e325796b6153952e6bf6188cc842c5e1e 100644 --- a/lib/std/os/linux.zig +++ b/lib/std/os/linux.zig @@ -1614,6 +1614,10 @@ pub fn getpid() pid_t { return @bitCast(@as(u32, @truncate(syscall0(.getpid)))); } +pub fn getppid() pid_t { + return @bitCast(@as(u32, @truncate(syscall0(.getppid)))); +} + pub fn gettid() pid_t { return @bitCast(@as(u32, @truncate(syscall0(.gettid)))); } diff --git a/lib/std/os/linux/test.zig b/lib/std/os/linux/test.zig index b3c02803f301082d4746fce991adf0fd6323b00f..8562d4be8e216e863444a6501a7bc0cc98dc6d8f 100644 --- a/lib/std/os/linux/test.zig +++ b/lib/std/os/linux/test.zig @@ -32,6 +32,10 @@ test "getpid" { try expect(linux.getpid() != 0); } +test "getppid" { + try expect(linux.getppid() != 0); +} + test "timer" { const epoll_fd = linux.epoll_create(); var err: linux.E = linux.E.init(epoll_fd);