// +build solaris package runtime import ( "bytes" "encoding/json" "fmt" "os/exec" runtimespec "github.com/opencontainers/runtime-spec/specs-go" ) // On Solaris we already have a state file maintained by the framework. // This is read by runz state. We just call that instead of maintaining // a separate file. func (p *process) getPidFromFile() (int, error) { //we get this information from runz state cmd := exec.Command("runc", "state", p.container.ID()) outBuf, errBuf := new(bytes.Buffer), new(bytes.Buffer) cmd.Stdout, cmd.Stderr = outBuf, errBuf if err := cmd.Run(); err != nil { // TODO: Improve logic return -1, errContainerNotFound } response := runtimespec.State{} decoder := json.NewDecoder(outBuf) if err := decoder.Decode(&response); err != nil { return -1, fmt.Errorf("unable to decode json response: %+v", err) } p.pid = response.Pid return p.pid, nil }