1 Star 1 Fork 0

Breeze / bzv2

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
kill.go 1.72 KB
一键复制 编辑 原始数据 按行查看 历史
Breeze 提交于 2023-08-20 01:17 . A:gin.test
package bzcmd
import (
"fmt"
"gitee.com/breezeHub/bzv2/pkg/code/bzerr"
"gitee.com/breezeHub/bzv2/pkg/data/bzbyte"
"gitee.com/breezeHub/bzv2/pkg/data/bzstr"
"gitee.com/breezeHub/bzv2/pkg/text/bzfile"
"github.com/pkg/errors"
"strconv"
)
func PidOf(pidName string) []int {
var ret []int
dirs, err := bzfile.DirList("/proc")
if err != nil {
return ret
}
count := len(dirs)
for i := 0; i < count; i++ {
pid, err := strconv.Atoi(dirs[i])
if err != nil {
continue
}
cmdlineFile := fmt.Sprintf("/proc/%d/cmdline", pid)
if !bzfile.IsExist(cmdlineFile) {
continue
}
cmdlineBytes, err := bzfile.ReadBytes(cmdlineFile)
if err != nil {
continue
}
cmdlineBytesLen := len(cmdlineBytes)
if cmdlineBytesLen == 0 {
continue
}
noNut := make([]byte, 0, cmdlineBytesLen)
for j := 0; j < cmdlineBytesLen; j++ {
if cmdlineBytes[j] != 0 {
noNut = append(noNut, cmdlineBytes[j])
}
}
if bzstr.Contains(bzbyte.ToString(noNut), pidName) {
ret = append(ret, pid)
}
}
return ret
}
func KillPidOf(pidName string) error {
if bzstr.IsEmpty(pidName) {
return errors.New("pid name is empty")
}
pids := PidOf(pidName)
for _, pid := range pids {
if out, err := KillPid9(pid); err != nil {
return bzerr.WrapF(err, "kill -9 %d fail, output: %s", pid, out)
}
}
return nil
}
func KillPid9(pid int) (string, error) {
out, err := CmdOutput("kill", "-9", strconv.Itoa(pid))
if err != nil {
return out, errors.Wrapf(err, "kill -9 %d fail, output: %s", pid, out)
}
return out, nil
}
func KillPid15(pid int) (string, error) {
out, err := CmdOutput("kill", "-15", strconv.Itoa(pid))
if err != nil {
return out, errors.Wrapf(err, "kill -15 %d fail, output: %s", pid, out)
}
return out, nil
}
Go
1
https://gitee.com/breezeHub/bzv2.git
git@gitee.com:breezeHub/bzv2.git
breezeHub
bzv2
bzv2
v0.0.5

搜索帮助

53164aa7 5694891 3bd8fe86 5694891