/
signal.go
46 lines (38 loc) · 1.03 KB
/
signal.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package elfgate
// System Signal capture & handle.
// Also Signal will run in main thread util program stopped.
// @AUTHOR tangyang
import (
"os"
"fmt"
"time"
"os/signal"
"syscall"
)
type Signal struct {
signalChan chan os.Signal
}
func NewSignal() *Signal {
signalChan := make(chan os.Signal)
signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM) // 监听interrupt & kill
return &Signal{
signalChan : signalChan,
}
}
func (t *Signal) Run() {
for {
signal := <-t.signalChan
if signal == syscall.SIGINT || signal == syscall.SIGTERM { // stop the running
if SSHAgents == nil { // Not connected to all clients
fmt.Println()
os.Exit(0)
} else { // cmds running stopped
SSHAgents.StopCmds()
SSHOput.Stop()
return
}
}
time.Sleep(100 * time.Microsecond)
}
}
/* vim: set expandtab ts=4 sw=4 sts=4 tw=100: */