import std/posix proc closeHandle(fd, flags: cint) = let devnull = open("/dev/null", flags) doAssert devnull != -1 if devnull != fd: discard dup2(devnull, fd) discard close(devnull) proc closeStdin*() = closeHandle(0, O_RDONLY) proc closeStdout*() = closeHandle(1, O_WRONLY) proc closeStderr*() = closeHandle(2, O_WRONLY) proc safeClose*(fd: cint) = if fd == 0: closeStdin() elif fd == 1 or fd == 2: closeHandle(fd, O_WRONLY) else: discard close(fd)