work on darwin

This commit is contained in:
David Dollar
2013-08-29 19:29:18 -04:00
parent 53c039f9c7
commit 080174df47
2 changed files with 48 additions and 4 deletions
+4 -4
View File
@@ -17,13 +17,13 @@ lint: $(SRC)
release: forego-linux forego-osx forego-windows
forego-linux: $(SRC)
env GOOS=linux GOARCH=386 go build -o $@
env GOOS=linux GOARCH=386 go build -o
forego-osx: $(SRC)
env GOOS=darwin GOARCH=386 go build -o $@
env GOOS=darwin GOARCH=386 go build -o
forego-windows: $(SRC)
env GOOS=windows GOARCH=386 go build -o $@
env GOOS=windows GOARCH=386 go build -o
$(BIN): $(SRC)
go build -o $@ $(SRC)
go build -o $@
+44
View File
@@ -0,0 +1,44 @@
package main
import (
"fmt"
"os"
"os/exec"
"path/filepath"
"syscall"
"time"
)
func (p *Process) Start() {
command := []string{"/bin/bash", "-c", fmt.Sprintf("source \"%s\" 2>/dev/null; %s", filepath.Join(p.Root, ".profile"), p.Command)}
p.cmd = exec.Command(command[0], command[1:]...)
p.cmd.Dir = p.Root
p.cmd.Env = p.envAsArray()
p.cmd.Stdin = p.Stdin
p.cmd.Stdout = p.Stdout
p.cmd.Stderr = p.Stderr
p.cmd.SysProcAttr = &syscall.SysProcAttr{}
p.cmd.SysProcAttr.Setsid = true
p.cmd.Start()
}
func (p *Process) Signal(signal syscall.Signal) {
group, _ := os.FindProcess(-1 * p.cmd.Process.Pid)
group.Signal(signal)
}
func ShutdownProcesses(of *OutletFactory) {
shutdown_mutex.Lock()
of.SystemOutput("shutting down")
for name, ps := range processes {
of.SystemOutput(fmt.Sprintf("sending SIGTERM to %s", name))
ps.Signal(syscall.SIGTERM)
}
go func() {
time.Sleep(shutdownGraceTime)
for name, ps := range processes {
of.SystemOutput(fmt.Sprintf("sending SIGKILL to %s", name))
ps.Signal(syscall.SIGKILL)
}
}()
}