authorgravatar for bblack@wikimedia.orgBrandon Black <bblack@wikimedia.org> 2025-07-11 08:33:15-05:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-07-14 07:26:49+02:00
loge8a4e47d384ab059c856fc99755f5e176bab67d2
treeee895edaa679a6e37928966568ae69f2c0e4270b
parentc6a18e9534025bb84f2707b3d2bd7437f2168a7e

Add setsid to std.(c|posix)

The interface and errors for this seem to be very universal and generic. Note Linux already has this defined as a syscall as well.

2 files changed, 15 insertions(+), 0 deletions(-)

lib/std/c.zig+1
......@@ -10808,6 +10808,7 @@ pub extern "c" fn if_nametoindex([*:0]const u8) c_int;
1080810808
1080910809pub extern "c" fn getpid() pid_t;
1081010810pub extern "c" fn getppid() pid_t;
10811pub extern "c" fn setsid() pid_t;
1081110812
1081210813/// These are implementation defined but share identical values in at least musl and glibc:
1081310814/// - https://git.musl-libc.org/cgit/musl/tree/include/locale.h?id=ab31e9d6a0fa7c5c408856c89df2dfb12c344039#n18
lib/std/posix.zig+14
......@@ -7089,6 +7089,20 @@ pub fn tcsetpgrp(handle: fd_t, pgrp: pid_t) TermioSetPgrpError!void {
70897089 }
70907090}
70917091
7092pub const SetSidError = error{
7093 /// The calling process is already a process group leader, or the process group ID of a process other than the calling process matches the process ID of the calling process.
7094 PermissionDenied,
7095} || UnexpectedError;
7096
7097pub fn setsid() SetSidError!pid_t {
7098 const rc = system.setsid();
7099 switch (errno(rc)) {
7100 .SUCCESS => return rc,
7101 .PERM => return error.PermissionDenied,
7102 else => |err| return unexpectedErrno(err),
7103 }
7104}
7105
70927106pub fn signalfd(fd: fd_t, mask: *const sigset_t, flags: u32) !fd_t {
70937107 const rc = system.signalfd(fd, mask, flags);
70947108 switch (errno(rc)) {