package common
import (
"context"
"os/exec"
"strconv"
"strings"
)
func CallLsofWithContext (ctx context .Context , invoke Invoker , pid int32 , args ...string ) ([]string , error ) {
var cmd []string
if pid == 0 {
cmd = []string {"-a" , "-n" , "-P" }
} else {
cmd = []string {"-a" , "-n" , "-P" , "-p" , strconv .Itoa (int (pid ))}
}
cmd = append (cmd , args ...)
lsof , err := exec .LookPath ("lsof" )
if err != nil {
return []string {}, err
}
out , err := invoke .CommandWithContext (ctx , lsof , cmd ...)
if err != nil {
if err .Error() == "exit status 1" && len (out ) == 0 {
return []string {}, nil
}
}
lines := strings .Split (string (out ), "\n" )
var ret []string
for _ , l := range lines [1 :] {
if len (l ) == 0 {
continue
}
ret = append (ret , l )
}
return ret , nil
}
func CallPgrepWithContext (ctx context .Context , invoke Invoker , pid int32 ) ([]int32 , error ) {
cmd := []string {"-P" , strconv .Itoa (int (pid ))}
pgrep , err := exec .LookPath ("pgrep" )
if err != nil {
return []int32 {}, err
}
out , err := invoke .CommandWithContext (ctx , pgrep , cmd ...)
if err != nil {
return []int32 {}, err
}
lines := strings .Split (string (out ), "\n" )
ret := make ([]int32 , 0 , len (lines ))
for _ , l := range lines {
if len (l ) == 0 {
continue
}
i , err := strconv .Atoi (l )
if err != nil {
continue
}
ret = append (ret , int32 (i ))
}
return ret , nil
}
The pages are generated with Golds v0.6.7 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds .