12345678910111213141516171819202122232425262728293031323334 |
- // +build !windows
- package utils
- import (
- "io/ioutil"
- "strconv"
- "syscall"
- )
- func CloseExecFrom(minFd int) error {
- fdList, err := ioutil.ReadDir("/proc/self/fd")
- if err != nil {
- return err
- }
- for _, fi := range fdList {
- fd, err := strconv.Atoi(fi.Name())
- if err != nil {
- // ignore non-numeric file names
- continue
- }
- if fd < minFd {
- // ignore descriptors lower than our specified minimum
- continue
- }
- // intentionally ignore errors from syscall.CloseOnExec
- syscall.CloseOnExec(fd)
- // the cases where this might fail are basically file descriptors that have already been closed (including and especially the one that was created when ioutil.ReadDir did the "opendir" syscall)
- }
- return nil
- }
|