mirror of
https://github.com/mattermost/mattermost.git
synced 2025-02-25 18:55:24 -06:00
* begin backend plugin wip * flesh out rpcplugin. everything done except for minor supervisor stubs * done with basic plugin infrastructure * simplify tests * remove unused test lines
46 lines
744 B
Go
46 lines
744 B
Go
// +build !windows
|
|
|
|
package rpcplugin
|
|
|
|
import (
|
|
"context"
|
|
"io"
|
|
"os"
|
|
"os/exec"
|
|
)
|
|
|
|
type process struct {
|
|
command *exec.Cmd
|
|
}
|
|
|
|
func newProcess(ctx context.Context, path string) (Process, io.ReadWriteCloser, error) {
|
|
ipc, childFiles, err := NewIPC()
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
defer childFiles[0].Close()
|
|
defer childFiles[1].Close()
|
|
|
|
cmd := exec.CommandContext(ctx, path)
|
|
cmd.Stdout = os.Stdout
|
|
cmd.Stderr = os.Stderr
|
|
cmd.ExtraFiles = childFiles
|
|
err = cmd.Start()
|
|
if err != nil {
|
|
ipc.Close()
|
|
return nil, nil, err
|
|
}
|
|
|
|
return &process{
|
|
command: cmd,
|
|
}, ipc, nil
|
|
}
|
|
|
|
func (p *process) Wait() error {
|
|
return p.command.Wait()
|
|
}
|
|
|
|
func inheritedProcessIPC() (io.ReadWriteCloser, error) {
|
|
return InheritedIPC(3, 4)
|
|
}
|