fix bug that darwin cannot compile due to syscall_t error
This commit is contained in:
parent
5c2cce2da2
commit
26da8c8b88
8
memory_darwin.go
Normal file
8
memory_darwin.go
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
//+build darwin
|
||||||
|
|
||||||
|
package staros
|
||||||
|
|
||||||
|
// Memory 系统内存信息
|
||||||
|
func Memory() MemStatus {
|
||||||
|
return MemStatus{}
|
||||||
|
}
|
24
memory_linux.go
Normal file
24
memory_linux.go
Normal file
@ -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
|
7
typed.go
7
typed.go
@ -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…
x
Reference in New Issue
Block a user