123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- package util
- import (
- "os"
- "os/exec"
- "strconv"
- "strings"
- )
- // GetSubProcessPid 只用于一个子进程
- func GetSubProcessPid(pid int) (int, error) {
- pgrepCmd := exec.Command("pgrep", "-P", strconv.Itoa(pid))
- output, err := pgrepCmd.CombinedOutput()
- if err != nil {
- return 0, err
- }
- replace := strings.Replace(string(output), "\n", "", 1)
- subProcessPid, err := strconv.Atoi(replace)
- if err != nil {
- return 0, err
- }
- return subProcessPid, nil
- }
- func ExecuteWithPath(path string, name string, arg ...string) (*exec.Cmd, error) {
- // 创建一个Cmd对象,表示要执行的命令
- cmd := exec.Command(name, arg...)
- // 指定目录
- cmd.Dir = path
- err := cmd.Start()
- if err != nil {
- return nil, err
- } else {
- // 执行命令并等待它完成d
- return cmd, nil
- }
- }
- // KillProcessByPid 必须使用该golang原生方法,通过直接执行kill命令行不通。
- func KillProcessByPid(pid int) error {
- process, err := os.FindProcess(pid)
- if err != nil {
- return err
- }
- err = process.Kill()
- if err != nil {
- return err
- }
- return nil
- }
- func Execute(name string, arg ...string) (*exec.Cmd, string, error) {
- cmd := exec.Command(name, arg...)
- combinedOutput, err := cmd.CombinedOutput()
- if err != nil {
- return nil, "", err
- }
- return cmd, string(combinedOutput), nil
- }
|