MCPcopy
hub / github.com/wavetermdev/waveterm / MakeJobCmd

Function MakeJobCmd

pkg/jobmanager/jobcmd.go:44–73  ·  view source on GitHub ↗
(jobId string, cmdDef CmdDef)

Source from the content-addressed store, hash-verified

42}
43
44func MakeJobCmd(jobId string, cmdDef CmdDef) (*JobCmd, error) {
45 jm := &JobCmd{
46 jobId: jobId,
47 }
48 if cmdDef.TermSize.Rows == 0 || cmdDef.TermSize.Cols == 0 {
49 cmdDef.TermSize.Rows = 25
50 cmdDef.TermSize.Cols = 80
51 }
52 if cmdDef.TermSize.Rows <= 0 || cmdDef.TermSize.Cols <= 0 {
53 return nil, fmt.Errorf("invalid term size: %v", cmdDef.TermSize)
54 }
55 ecmd := exec.Command(cmdDef.Cmd, cmdDef.Args...)
56 if len(cmdDef.Env) > 0 {
57 ecmd.Env = make([]string, 0, len(cmdDef.Env))
58 for key, val := range cmdDef.Env {
59 ecmd.Env = append(ecmd.Env, fmt.Sprintf("%s=%s", key, val))
60 }
61 }
62 cmdPty, err := pty.StartWithSize(ecmd, &pty.Winsize{Rows: uint16(cmdDef.TermSize.Rows), Cols: uint16(cmdDef.TermSize.Cols)})
63 if err != nil {
64 return nil, fmt.Errorf("failed to start command: %w", err)
65 }
66 unixutil.SetCloseOnExec(int(cmdPty.Fd()))
67 jm.cmd = ecmd
68 jm.cmdPty = cmdPty
69 jm.ptsName = jm.cmdPty.Name()
70 jm.termSize = cmdDef.TermSize
71 go jm.waitForProcess()
72 return jm, nil
73}
74
75func (jm *JobCmd) waitForProcess() {
76 if jm.cmd == nil || jm.cmd.Process == nil {

Callers 1

StartJobMethod · 0.85

Calls 4

waitForProcessMethod · 0.95
SetCloseOnExecFunction · 0.92
FdMethod · 0.80
NameMethod · 0.45

Tested by

no test coverage detected