From 9f2f5d20d7915e3a517ffbc480055db8606c025d Mon Sep 17 00:00:00 2001 From: John Date: Fri, 24 Aug 2018 22:33:38 +0800 Subject: [PATCH] =?UTF-8?q?gproc=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?= =?UTF-8?q?=EF=BC=8C=E7=A4=BA=E4=BE=8B=E7=A8=8B=E5=BA=8F=E6=94=B9=E8=BF=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- g/os/gproc/gproc_comm.go | 6 ------ g/os/gproc/gproc_comm_receive.go | 5 +++-- g/os/gproc/gproc_comm_send.go | 5 +++-- geg/os/gproc/cmd.go | 15 --------------- geg/os/gproc/gproc.go | 1 + geg/os/gproc/gproc2.go | 1 + geg/os/gproc/gproc3.go | 3 ++- geg/os/gproc/gproc4.go | 2 +- geg/os/gproc/{gproc5.go => gproc_shellexec.go} | 2 +- 9 files changed, 12 insertions(+), 28 deletions(-) delete mode 100644 geg/os/gproc/cmd.go rename geg/os/gproc/{gproc5.go => gproc_shellexec.go} (71%) diff --git a/g/os/gproc/gproc_comm.go b/g/os/gproc/gproc_comm.go index 763805234..7728c0897 100644 --- a/g/os/gproc/gproc_comm.go +++ b/g/os/gproc/gproc_comm.go @@ -28,12 +28,6 @@ type Msg struct { Group string // 分组名称 } -// TCP通信数据结构定义 -type sendQueueItem struct { - Pid int // PID,发向哪个进程 - Data []byte // 数据 -} - // 获取指定进程的通信文件地址 func getCommFilePath(pid int) string { return getCommDirPath() + gfile.Separator + gconv.String(pid) diff --git a/g/os/gproc/gproc_comm_receive.go b/g/os/gproc/gproc_comm_receive.go index dbf52a975..a6f124bc5 100644 --- a/g/os/gproc/gproc_comm_receive.go +++ b/g/os/gproc/gproc_comm_receive.go @@ -76,6 +76,7 @@ func tcpServiceHandler(conn *gtcp.Conn) { break } } + // 成功时会返回ok给peer if len(result) == 0 { result = []byte("ok") for _, msg := range msgs { @@ -129,9 +130,9 @@ func bufferToMsgs(buffer []byte) []*Msg { return msgs } -// 获取其他进程传递到当前进程的消息包,阻塞执行 +// 获取其他进程传递到当前进程的消息包,阻塞执行。 func Receive(group...string) *Msg { - // 开启端口监听 + // 开启接收协程时才会开启端口监听 go startTcpListening() var queue *gqueue.Queue diff --git a/g/os/gproc/gproc_comm_send.go b/g/os/gproc/gproc_comm_send.go index 4b10c5a7b..94ed30f14 100644 --- a/g/os/gproc/gproc_comm_send.go +++ b/g/os/gproc/gproc_comm_send.go @@ -16,6 +16,7 @@ import ( "time" "bytes" "gitee.com/johng/gf/g/os/glog" + "io" ) const ( @@ -55,8 +56,8 @@ func Send(pid int, data []byte, group...string) error { break } } - - if err == nil { + // EOF不算异常错误 + if err == nil || err == io.EOF { break } else { glog.Error(err) diff --git a/geg/os/gproc/cmd.go b/geg/os/gproc/cmd.go deleted file mode 100644 index 0cd84127f..000000000 --- a/geg/os/gproc/cmd.go +++ /dev/null @@ -1,15 +0,0 @@ -package main - -import ( - "os" - "fmt" - "time" - "os/exec" -) - -func main () { - cmd := exec.Command(os.Args[0], "1") - time.Sleep(3*time.Second) - fmt.Println(cmd.Start()) - time.Sleep(time.Hour) -} diff --git a/geg/os/gproc/gproc.go b/geg/os/gproc/gproc.go index f8b103902..0bb2628cf 100644 --- a/geg/os/gproc/gproc.go +++ b/geg/os/gproc/gproc.go @@ -7,6 +7,7 @@ import ( "gitee.com/johng/gf/g/os/gproc" ) +// 父子进程基本演示 func main () { if gproc.IsChild() { glog.Printfln("%d: Hi, I am child, waiting 3 seconds to die", gproc.Pid()) diff --git a/geg/os/gproc/gproc2.go b/geg/os/gproc/gproc2.go index ae9590215..80a24eed8 100644 --- a/geg/os/gproc/gproc2.go +++ b/geg/os/gproc/gproc2.go @@ -5,6 +5,7 @@ import ( "gitee.com/johng/gf/g/os/gproc" ) +// 使用gproc kill指定其他进程(清确保运行该程序的用户有足够权限) func main () { pid := 28536 m := gproc.NewManager() diff --git a/geg/os/gproc/gproc3.go b/geg/os/gproc/gproc3.go index caf4ccfaf..ced9c5b01 100644 --- a/geg/os/gproc/gproc3.go +++ b/geg/os/gproc/gproc3.go @@ -7,7 +7,8 @@ import ( "gitee.com/johng/gf/g/os/gproc" ) -// 父进程销毁后,请使用进程管理器查看存活的子进程 +// 父进程销毁后,使用进程管理器查看存活的子进程。 +// 请使用go build编译后运行,不要使用IDE运行,因为IDE大多采用的是子进程方式执行。 func main () { if gproc.IsChild() { glog.Printfln("%d: I am child, waiting 10 seconds to die", gproc.Pid()) diff --git a/geg/os/gproc/gproc4.go b/geg/os/gproc/gproc4.go index db5eddf12..a65df93c3 100644 --- a/geg/os/gproc/gproc4.go +++ b/geg/os/gproc/gproc4.go @@ -8,7 +8,7 @@ import ( "gitee.com/johng/gf/g/os/gproc" ) -// 查看进程的环境变量 +// 查看父子进程的环境变量 func main () { time.Sleep(5*time.Second) glog.Printfln("%d: %v", gproc.Pid(), genv.All()) diff --git a/geg/os/gproc/gproc5.go b/geg/os/gproc/gproc_shellexec.go similarity index 71% rename from geg/os/gproc/gproc5.go rename to geg/os/gproc/gproc_shellexec.go index b83bbe54a..8abb43624 100644 --- a/geg/os/gproc/gproc5.go +++ b/geg/os/gproc/gproc_shellexec.go @@ -7,6 +7,6 @@ import ( // 执行shell指令 func main () { - r, err := gproc.ShellExec("echo 'hello';") + r, err := gproc.ShellExec("sleep 3s; echo 'hello';") fmt.Println("result:", r, err) }