Closed soh335 closed 7 years ago
日本語で失礼します。
~ goemon sleep 100 GOEMON 2017/01/24 13:05:55 goemon.go:273: open /Users/soh335/goemon.yml: no such file or directory GOEMON 2017/01/24 13:05:55 goemon.go:277: loading /Users/soh335/goemon.yml GOEMON 2017/01/24 13:05:55 goemon.go:314: starting command [sleep 100] GOEMON 2017/01/24 13:05:55 goemon.go:294: starting livereload ^CGOEMON 2017/01/24 13:05:58 goemon.go:318: signal: interrupt GOEMON 2017/01/24 13:05:59 goemon.go:321: restarting command GOEMON 2017/01/24 13:05:59 proc_posix.go:21: os: process already finished ~ ps ax | grep sleep 76828 s006 S 0:00.00 sleep 100
signal を受けてから terminate している間に5秒間 sleep してしまうのでその間に再度 restart が走ってしい、その後 os.Exit で goemon だけ落ちてしまうという状態のようです。( process に signal 送った場合は ProcessState.Exited() が false になるようなので)
とりあえず再起動と終了を同じ goroutine で受けるようにして同時に処理しないようにしてみました。
ただ、プロセスが終わっていたら sleep の loop を抜ける、 process がまだ終わっていなかったら kill するという意味だったらこうなのかな?とも感じました。
diff --git a/proc_posix.go b/proc_posix.go index 6a683d7..ce7a4fa 100644 --- a/proc_posix.go +++ b/proc_posix.go @@ -22,14 +22,14 @@ func (g *goemon) terminate() error { } else { cd := 5 for cd > 0 { - if g.cmd.ProcessState != nil && g.cmd.ProcessState.Exited() { + if g.cmd.ProcessState != nil { break } time.Sleep(time.Second) cd-- } } - if g.cmd.ProcessState != nil && g.cmd.ProcessState.Exited() { + if g.cmd.ProcessState == nil { g.cmd.Process.Kill() } }
勘違いしていたらすいません!
$ go version go version go1.7.4 darwin/amd64
あざます!
日本語で失礼します。
起きてること
signal を受けてから terminate している間に5秒間 sleep してしまうのでその間に再度 restart が走ってしい、その後 os.Exit で goemon だけ落ちてしまうという状態のようです。( process に signal 送った場合は ProcessState.Exited() が false になるようなので)
とりあえず再起動と終了を同じ goroutine で受けるようにして同時に処理しないようにしてみました。
ただ、プロセスが終わっていたら sleep の loop を抜ける、 process がまだ終わっていなかったら kill するという意味だったらこうなのかな?とも感じました。
勘違いしていたらすいません!
環境