fix bug that darwin cannot compile due to syscall_t error

master
兔子 4 years ago
parent 5c2cce2da2
commit 26da8c8b88

@ -0,0 +1,8 @@
//+build darwin
package staros
// Memory 系统内存信息
func Memory() MemStatus {
return MemStatus{}
}

@ -0,0 +1,24 @@
//+build linux
package staros
import "syscall"
// Memory 系统内存信息
func Memory() MemStatus {
var mem MemStatus
ram := new(syscall.Sysinfo_t)
if err := syscall.Sysinfo(ram); err != nil {
return mem
}
mem.All = uint64(ram.Totalram)
mem.BuffCache = uint64(ram.Bufferram)
mem.Free = uint64(ram.Freeram)
mem.Shared = uint64(ram.Sharedram)
mem.Available = uint64(ram.Freeram + ram.Sharedram + ram.Bufferram)
mem.SwapAll = uint64(ram.Totalswap)
mem.SwapFree = uint64(ram.Freeswap)
mem.SwapUsed = uint64(mem.SwapAll - mem.SwapFree)
mem.Used = uint64(mem.All - mem.Free)
return mem
}

@ -29,25 +29,6 @@ func IsRoot() bool {
return false return false
} }
// Memory 系统内存信息
func Memory() MemStatus {
var mem MemStatus
ram := new(syscall.Sysinfo_t)
if err := syscall.Sysinfo(ram); err != nil {
return mem
}
mem.All = ram.Totalram
mem.BuffCache = ram.Bufferram
mem.Free = ram.Freeram
mem.Shared = ram.Sharedram
mem.Available = ram.Freeram + ram.Sharedram + ram.Bufferram
mem.SwapAll = ram.Totalswap
mem.SwapFree = ram.Freeswap
mem.SwapUsed = mem.SwapAll - mem.SwapFree
mem.Used = mem.All - mem.Free
return mem
}
func Whoami() (uid, gid int, uname, gname, home string, err error) { func Whoami() (uid, gid int, uname, gname, home string, err error) {
var me *user.User var me *user.User
var gup *user.Group var gup *user.Group

@ -16,8 +16,18 @@ import (
"time" "time"
) )
// FindProcessByName 通过进程名来查询应用信息 //FindProcessByName 通过进程名来查询应用信息
func FindProcessByName(pname string) (datas []Process, err error) { func FindProcessByName(name string) (datas []Process, err error) {
return FindProcess(func(pname, exepath, folderpath string) bool {
if name == pname {
return true
}
return false
})
}
// FindProcess 通过进程信息来查询应用信息
func FindProcess(compare func(string, string, string) bool) (datas []Process, err error) {
var name, main string var name, main string
var mainb []byte var mainb []byte
paths, errs := ioutil.ReadDir("/proc") paths, errs := ioutil.ReadDir("/proc")
@ -31,14 +41,24 @@ func FindProcessByName(pname string) (datas []Process, err error) {
if err != nil { if err != nil {
return return
} }
if strings.TrimSpace(name) == pname { var tmp Process
var tmp Process tmp.LocalPath, err = os.Readlink("/proc/" + v.Name() + "/exe")
if err != nil {
return
}
tmp.Path = tmp.LocalPath
tmp.LocalPath = filepath.Dir(tmp.LocalPath)
tmp.ExecPath, err = os.Readlink("/proc/" + v.Name() + "/cwd")
if err != nil {
return
}
tmp.Name = strings.TrimSpace(name)
if compare(tmp.Name, tmp.LocalPath, tmp.ExecPath) {
main, err = readAsString("/proc/" + v.Name() + "/status") main, err = readAsString("/proc/" + v.Name() + "/status")
if err != nil { if err != nil {
return return
} }
data := splitBy(main, ":") data := splitBy(main, ":")
tmp.Name = pname
tmp.Pid, _ = strconv.ParseInt(data["Pid"], 10, 64) tmp.Pid, _ = strconv.ParseInt(data["Pid"], 10, 64)
tmp.PPid, _ = strconv.ParseInt(data["PPid"], 10, 64) tmp.PPid, _ = strconv.ParseInt(data["PPid"], 10, 64)
tmp.TPid, _ = strconv.ParseInt(data["TracerPid"], 10, 64) tmp.TPid, _ = strconv.ParseInt(data["TracerPid"], 10, 64)
@ -48,6 +68,18 @@ func FindProcessByName(pname string) (datas []Process, err error) {
tmp.EUID, _ = strconv.Atoi(uids[1]) tmp.EUID, _ = strconv.Atoi(uids[1])
tmp.RGID, _ = strconv.Atoi(gids[0]) tmp.RGID, _ = strconv.Atoi(gids[0])
tmp.EGID, _ = strconv.Atoi(gids[1]) tmp.EGID, _ = strconv.Atoi(gids[1])
tmp.VmPeak, _ = strconv.ParseInt(splitBySpace(data["VmPeak"])[0], 10, 64)
tmp.VmSize, _ = strconv.ParseInt(splitBySpace(data["VmSize"])[0], 10, 64)
tmp.VmHWM, _ = strconv.ParseInt(splitBySpace(data["VmHWM"])[0], 10, 64)
tmp.VmRSS, _ = strconv.ParseInt(splitBySpace(data["VmRSS"])[0], 10, 64)
tmp.VmLck, _ = strconv.ParseInt(splitBySpace(data["VmLck"])[0], 10, 64)
tmp.VmData, _ = strconv.ParseInt(splitBySpace(data["VmData"])[0], 10, 64)
tmp.VmLck *= 1024
tmp.VmData *= 1024
tmp.VmPeak *= 1024
tmp.VmSize *= 1024
tmp.VmHWM *= 1024
tmp.VmRSS *= 1024
mainb, err = ioutil.ReadFile("/proc/" + v.Name() + "/cmdline") mainb, err = ioutil.ReadFile("/proc/" + v.Name() + "/cmdline")
if err != nil { if err != nil {
return return
@ -56,16 +88,16 @@ func FindProcessByName(pname string) (datas []Process, err error) {
for _, v := range args { for _, v := range args {
tmp.Args = append(tmp.Args, string(v)) tmp.Args = append(tmp.Args, string(v))
} }
tmp.LocalPath, err = os.Readlink("/proc/" + v.Name() + "/exe")
mainb, err = ioutil.ReadFile("/proc/" + v.Name() + "/environ")
if err != nil { if err != nil {
return return
} }
tmp.Path = tmp.LocalPath args = bytes.Split(mainb, []byte{0})
tmp.LocalPath = filepath.Dir(tmp.LocalPath) for _, v := range args {
tmp.ExecPath, err = os.Readlink("/proc/" + v.Name() + "/cwd") tmp.Env = append(tmp.Env, string(v))
if err != nil {
return
} }
main, err = readAsString("/proc/" + v.Name() + "/stat") main, err = readAsString("/proc/" + v.Name() + "/stat")
if err != nil { if err != nil {
return return
@ -107,6 +139,18 @@ func FindProcessByPid(pid int64) (datas Process, err error) {
datas.EUID, _ = strconv.Atoi(uids[1]) datas.EUID, _ = strconv.Atoi(uids[1])
datas.RGID, _ = strconv.Atoi(gids[0]) datas.RGID, _ = strconv.Atoi(gids[0])
datas.EGID, _ = strconv.Atoi(gids[1]) datas.EGID, _ = strconv.Atoi(gids[1])
datas.VmPeak, _ = strconv.ParseInt(splitBySpace(data["VmPeak"])[0], 10, 64)
datas.VmSize, _ = strconv.ParseInt(splitBySpace(data["VmSize"])[0], 10, 64)
datas.VmHWM, _ = strconv.ParseInt(splitBySpace(data["VmHWM"])[0], 10, 64)
datas.VmRSS, _ = strconv.ParseInt(splitBySpace(data["VmRSS"])[0], 10, 64)
datas.VmLck, _ = strconv.ParseInt(splitBySpace(data["VmLck"])[0], 10, 64)
datas.VmData, _ = strconv.ParseInt(splitBySpace(data["VmData"])[0], 10, 64)
datas.VmLck *= 1024
datas.VmData *= 1024
datas.VmPeak *= 1024
datas.VmSize *= 1024
datas.VmHWM *= 1024
datas.VmRSS *= 1024
mainb, err = ioutil.ReadFile("/proc/" + fmt.Sprint(pid) + "/cmdline") mainb, err = ioutil.ReadFile("/proc/" + fmt.Sprint(pid) + "/cmdline")
if err != nil { if err != nil {
return return
@ -115,6 +159,16 @@ func FindProcessByPid(pid int64) (datas Process, err error) {
for _, v := range args { for _, v := range args {
datas.Args = append(datas.Args, string(v)) datas.Args = append(datas.Args, string(v))
} }
mainb, err = ioutil.ReadFile("/proc/" + fmt.Sprint(pid) + "/environ")
if err != nil {
return
}
args = bytes.Split(mainb, []byte{0})
for _, v := range args {
datas.Env = append(datas.Env, string(v))
}
datas.LocalPath, err = os.Readlink("/proc/" + fmt.Sprint(pid) + "/exe") datas.LocalPath, err = os.Readlink("/proc/" + fmt.Sprint(pid) + "/exe")
if err != nil { if err != nil {
return return

@ -33,12 +33,19 @@ type Process struct {
LocalPath string LocalPath string
Path string Path string
Args []string Args []string
Env []string
RUID int RUID int
EUID int EUID int
RGID int RGID int
EGID int EGID int
TPid int64 TPid int64
Uptime time.Time Uptime time.Time
VmPeak int64
VmSize int64
VmLck int64
VmHWM int64
VmRSS int64
VmData int64
} }
type MemStatus struct { type MemStatus struct {

Loading…
Cancel
Save