integration: Robust process termination
This commit is contained in:
parent
f470d1cc06
commit
bb4ab7e333
|
@ -21,6 +21,7 @@ import (
|
|||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"syscall"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
@ -203,10 +204,20 @@ func (st *serverTester) Close() {
|
|||
st.conn.Close()
|
||||
}
|
||||
if st.cmd != nil {
|
||||
st.cmd.Process.Kill()
|
||||
done := make(chan struct{})
|
||||
go func() {
|
||||
st.cmd.Wait()
|
||||
// workaround to unreliable Process.Signal()
|
||||
time.Sleep(150 * time.Millisecond)
|
||||
done <- struct{}{}
|
||||
}()
|
||||
|
||||
st.cmd.Process.Signal(syscall.SIGQUIT)
|
||||
|
||||
select {
|
||||
case <-done:
|
||||
case <-time.After(10 * time.Second):
|
||||
st.cmd.Process.Kill()
|
||||
<-done
|
||||
}
|
||||
}
|
||||
if st.ts != nil {
|
||||
st.ts.Close()
|
||||
|
|
Loading…
Reference in New Issue