Skip to content

Instantly share code, notes, and snippets.

@horitaku1124
Last active November 7, 2018 10:58
Show Gist options
  • Save horitaku1124/900de035adb74e0cee5ee0b08176fab8 to your computer and use it in GitHub Desktop.
Save horitaku1124/900de035adb74e0cee5ee0b08176fab8 to your computer and use it in GitHub Desktop.
go version
package main
import (
"fmt"
"io"
"log"
"os"
"os/exec"
"os/signal"
)
func subProcess(cmd *exec.Cmd, stdout io.ReadCloser) {
buffer := make([]byte, 1000)
for {
readSize, err3 := stdout.Read(buffer)
if err3 != nil {
// panic(err3)
break
}
if readSize <= 0 {
break
}
fmt.Printf("byte: %d - %s\n", readSize, string(buffer))
}
fmt.Println("done")
os.Exit(0)
}
func main() {
cmd := exec.Command("ping", "192.168.11.1", "-c", "5")
stdout, err := cmd.StdoutPipe()
if err != nil {
log.Fatal(err)
}
err2 := cmd.Start()
if err2 != nil {
panic(err2)
}
go subProcess(cmd, stdout)
fmt.Printf("PID= %d\n", cmd.Process.Pid)
// defer cmd.Wait()
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt)
// Block until a signal is received.
s := <-c
fmt.Println("Got signal:", s)
err4 := cmd.Process.Signal(os.Interrupt)
fmt.Println("Wait")
if err4 != nil {
panic(err4)
}
defer cmd.Wait()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment