-
Notifications
You must be signed in to change notification settings - Fork 176
/
process.go
36 lines (30 loc) · 664 Bytes
/
process.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
package main
import (
"os"
"os/exec"
"syscall"
)
type Process struct {
Command string
Env Env
Interactive bool
*exec.Cmd
}
func NewProcess(workdir, command string, env Env, interactive bool) (p *Process) {
argv := ShellInvocationCommand(interactive, workdir, command)
return &Process{
command, env, interactive, exec.Command(argv[0], argv[1:]...),
}
}
func (p *Process) Start() error {
p.Cmd.Env = p.Env.asArray()
p.PlatformSpecificInit()
return p.Cmd.Start()
}
func (p *Process) Signal(signal syscall.Signal) error {
group, err := os.FindProcess(-1 * p.Process.Pid)
if err == nil {
err = group.Signal(signal)
}
return err
}