GoFrame gproc-基本使用

2022-04-11 09:32 更新

執(zhí)行Shell命令

package main

import (
    "github.com/gogf/gf/v2/os/gproc"
    "fmt"
)

func main () {
    r, err := gproc.ShellExec(`sleep 3s; echo "hello gf!";`)
    fmt.Println("result:", r)
    fmt.Println(err)
}

執(zhí)行后,可以看到程序等待了3秒之后,輸出結(jié)果為:

result: hello gf!

<nil>

主進(jìn)程與子進(jìn)程

由?gproc.Manager?對(duì)象創(chuàng)建的進(jìn)程都默認(rèn)帶子進(jìn)程標(biāo)識(shí),在子進(jìn)程程序中可以通過(guò)?gproc.IsChild()?方法來(lái)判斷自身是否為子進(jìn)程。

package main

import (
    "os"
    "time"
    "github.com/gogf/gf/v2/os/glog"
    "github.com/gogf/gf/v2/os/gproc"
)

func main () {
    if gproc.IsChild() {
        glog.Printf("%d: Hi, I am child, waiting 3 seconds to die", gproc.Pid())
        time.Sleep(time.Second)
        glog.Printf("%d: 1", gproc.Pid())
        time.Sleep(time.Second)
        glog.Printf("%d: 2", gproc.Pid())
        time.Sleep(time.Second)
        glog.Printf("%d: 3", gproc.Pid())
    } else {
        m := gproc.NewManager()
        p := m.NewProcess(os.Args[0], os.Args, os.Environ())
        p.Start()
        p.Wait()
        glog.Printf("%d: child died", gproc.Pid())
    }
}

執(zhí)行后,終端打印結(jié)果如下:

2018-05-18 14:35:41.360 28285: Hi, I am child, waiting 3 seconds to die
2018-05-18 14:35:42.361 28285: 1
2018-05-18 14:35:43.361 28285: 2
2018-05-18 14:35:44.361 28285: 3
2018-05-18 14:35:44.362 28278: child died

多進(jìn)程管理

?gproc?除了能夠創(chuàng)建子進(jìn)程,管理子進(jìn)程之外,也能管理非自身創(chuàng)建的其他進(jìn)程。?gproc?可以同時(shí)管理多個(gè)進(jìn)程,這里以單個(gè)進(jìn)程為例來(lái)演示對(duì)進(jìn)程的管理功能。

  • 我們使用?gedit?軟件(Linux下常用的文本編輯器)隨意打開(kāi)一個(gè)文件,在進(jìn)程當(dāng)中我們看到該?gedit?的進(jìn)程ID為28536

 $ ps aux | grep gedit
 john  28536  3.6  0.6 946208 56412 ?  Sl  14:39  0:00 gedit /home/john/Documents/text

  • 我們的程序如下:

package main


import (
    "fmt"
    "github.com/gogf/gf/v2/os/gproc"
)


func main () {
    pid := 28536
    m   := gproc.NewManager()
    m.AddProcess(pid)
    m.KillAll()
    m.WaitAll()
    fmt.Printf("%d was killed\n", pid)
}

執(zhí)行后,?gedit?被關(guān)閉,終端輸出信息為:

28536 was killed


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)