|
|
@ -4,11 +4,23 @@ import ( |
|
|
|
"fmt" |
|
|
|
"fmt" |
|
|
|
"os/exec" |
|
|
|
"os/exec" |
|
|
|
"log" |
|
|
|
"log" |
|
|
|
|
|
|
|
"io" |
|
|
|
|
|
|
|
"os" |
|
|
|
"errors" |
|
|
|
"errors" |
|
|
|
"sync" |
|
|
|
"sync" |
|
|
|
"lcthw.dev/learn-code-the-hard-way/ozai/config" |
|
|
|
"lcthw.dev/learn-code-the-hard-way/ozai/config" |
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func LaunchLogger(in io.Reader, out io.Writer, err error) { |
|
|
|
|
|
|
|
if err != nil { log.Fatal(err) } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
go func() { |
|
|
|
|
|
|
|
if _, err := io.Copy(out, in); err != nil { |
|
|
|
|
|
|
|
log.Fatal(err) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}() |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
func main() { |
|
|
|
func main() { |
|
|
|
config.Load() |
|
|
|
config.Load() |
|
|
|
|
|
|
|
|
|
|
@ -30,14 +42,15 @@ func main() { |
|
|
|
cmd.Err = nil |
|
|
|
cmd.Err = nil |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
out, err := cmd.CombinedOutput() |
|
|
|
stderr, err := cmd.StderrPipe(); |
|
|
|
|
|
|
|
LaunchLogger(stderr, os.Stdout, err) |
|
|
|
|
|
|
|
|
|
|
|
if err != nil { |
|
|
|
stdout, err := cmd.StdoutPipe(); |
|
|
|
fmt.Printf("%s\n", out) |
|
|
|
LaunchLogger(stdout, os.Stdout, err) |
|
|
|
log.Fatal(err) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmd.Run() |
|
|
|
fmt.Println("WAITING for", name) |
|
|
|
fmt.Println("WAITING for", name) |
|
|
|
|
|
|
|
|
|
|
|
cmd.Wait() |
|
|
|
cmd.Wait() |
|
|
|
fmt.Println("PROC", name, "EXITED SEND QUIT") |
|
|
|
fmt.Println("PROC", name, "EXITED SEND QUIT") |
|
|
|
} |
|
|
|
} |
|
|
|