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) }