blob: a06d16f73b101f9e548ed57408cdc0a34dbd0ef2 [file] [log] [blame]
package main
import (
"crypto/sha256"
"flag"
"fmt"
"io"
"os"
"syscall"
"time"
)
var watch = flag.String("watch", "", "Path to watch")
var reload = flag.String("reload", "", "Path to PID file")
func check(err error) {
if err != nil {
panic(err)
}
}
func main() {
flag.Parse()
var prev string
for {
cur := func() string {
inp, err := os.Open(*watch)
check(err)
defer inp.Close()
h := sha256.New()
_, err = io.Copy(h, inp)
check(err)
return string(h.Sum(nil))
}()
if prev == "" {
prev = cur
continue
}
if prev != cur {
prev = cur
fmt.Println("changed")
pid := func() int {
inp, err := os.Open(*reload)
// TODO(gio): check error type
if err != nil {
return -1
}
defer inp.Close()
var ret int
_, err = fmt.Fscanf(inp, "%d", &ret)
check(err)
return ret
}()
if pid != -1 {
p, err := os.FindProcess(pid)
check(err)
fmt.Println("found process")
fmt.Println("%+v\n", p)
// TODO(gio): take signal value from flags
check(p.Signal(syscall.SIGKILL))
fmt.Println("sent signall")
}
} else {
fmt.Println("no change")
}
time.Sleep(5 * time.Second)
}
}