init
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
//go:build !windows
|
||||
|
||||
package runtime
|
||||
|
||||
import (
|
||||
"os"
|
||||
"os/exec"
|
||||
)
|
||||
|
||||
type execManagedProcess struct {
|
||||
cmd *exec.Cmd
|
||||
}
|
||||
|
||||
func startManagedProcess(command ProcessCommand, files managedProcessFiles, _ string) (managedProcess, error) {
|
||||
cmd := exec.Command(command.Args[0], command.Args[1:]...)
|
||||
cmd.Dir = command.WorkDir
|
||||
cmd.Env = os.Environ()
|
||||
for key, value := range command.Env {
|
||||
cmd.Env = append(cmd.Env, key+"="+value)
|
||||
}
|
||||
cmd.Stdout = files.stdout
|
||||
cmd.Stderr = files.stderr
|
||||
if err := cmd.Start(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &execManagedProcess{cmd: cmd}, nil
|
||||
}
|
||||
|
||||
func requestManagedProcessStop(identity ProcessIdentity) error {
|
||||
process, err := os.FindProcess(identity.PID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return process.Kill()
|
||||
}
|
||||
|
||||
func forceManagedProcessStop(identity ProcessIdentity) error {
|
||||
return requestManagedProcessStop(identity)
|
||||
}
|
||||
|
||||
func (process *execManagedProcess) PID() int {
|
||||
return process.cmd.Process.Pid
|
||||
}
|
||||
|
||||
func (process *execManagedProcess) TargetPID() int {
|
||||
return process.PID()
|
||||
}
|
||||
|
||||
func (process *execManagedProcess) Wait() (int, error) {
|
||||
err := process.cmd.Wait()
|
||||
if process.cmd.ProcessState == nil {
|
||||
return -1, err
|
||||
}
|
||||
return process.cmd.ProcessState.ExitCode(), err
|
||||
}
|
||||
|
||||
func (process *execManagedProcess) Kill() error {
|
||||
return process.cmd.Process.Kill()
|
||||
}
|
||||
Reference in New Issue
Block a user