Klack has this snippet (https://codeberg.org/ForeverZer0/klack/src/branch/master/src/main.zig)
fn daemonize(io: Io) File {
// Fork the process and exit the parent.
if (std.os.linux.fork() != 0) {
exit(0);
}
// Detach from terminal and start new session
_ = std.os.linux.setsid();
// Get handle to /dev/null to direct output to
const dev_null = Dir.cwd().openFile(io, "/dev/null", .{
.mode = .read_write,
}) catch @panic("Unable to open /dev/null");
// Redirect all input/output to /dev/null
_ = std.os.linux.dup2(dev_null.handle, File.stdout().handle);
_ = std.os.linux.dup2(dev_null.handle, File.stderr().handle);
_ = std.os.linux.dup2(dev_null.handle, File.stdin().handle);
return dev_null;
}
Klack has this snippet (https://codeberg.org/ForeverZer0/klack/src/branch/master/src/main.zig)