
This pulls in and uses github.com/docker/docker/pkg/chrootarchive for the actual copy up which is some battle hardened code to unpack avoiding things like symlink traversal security issues. However it does pull in a pretty huge pile of vendoring, including github.com/docker/docker/pkg/reexec which we must then call at startup. It's not immediately clear that this tradeoff is the correct one. Signed-off-by: Ian Campbell <ijc@docker.com>
28 lines
450 B
Go
28 lines
450 B
Go
package fileutils
|
|
|
|
import (
|
|
"os"
|
|
"os/exec"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
// GetTotalUsedFds returns the number of used File Descriptors by
|
|
// executing `lsof -p PID`
|
|
func GetTotalUsedFds() int {
|
|
pid := os.Getpid()
|
|
|
|
cmd := exec.Command("lsof", "-p", strconv.Itoa(pid))
|
|
|
|
output, err := cmd.CombinedOutput()
|
|
if err != nil {
|
|
return -1
|
|
}
|
|
|
|
outputStr := strings.TrimSpace(string(output))
|
|
|
|
fds := strings.Split(outputStr, "\n")
|
|
|
|
return len(fds) - 1
|
|
}
|