12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- package stdlib
- import (
- "os"
- "syscall"
- "github.com/d5/tengo/v2"
- )
- func makeOSProcessState(state *os.ProcessState) *tengo.ImmutableMap {
- return &tengo.ImmutableMap{
- Value: map[string]tengo.Object{
- "exited": &tengo.UserFunction{
- Name: "exited",
- Value: FuncARB(state.Exited),
- },
- "pid": &tengo.UserFunction{
- Name: "pid",
- Value: FuncARI(state.Pid),
- },
- "string": &tengo.UserFunction{
- Name: "string",
- Value: FuncARS(state.String),
- },
- "success": &tengo.UserFunction{
- Name: "success",
- Value: FuncARB(state.Success),
- },
- },
- }
- }
- func makeOSProcess(proc *os.Process) *tengo.ImmutableMap {
- return &tengo.ImmutableMap{
- Value: map[string]tengo.Object{
- "kill": &tengo.UserFunction{
- Name: "kill",
- Value: FuncARE(proc.Kill),
- },
- "release": &tengo.UserFunction{
- Name: "release",
- Value: FuncARE(proc.Release),
- },
- "signal": &tengo.UserFunction{
- Name: "signal",
- Value: func(args ...tengo.Object) (tengo.Object, error) {
- if len(args) != 1 {
- return nil, tengo.ErrWrongNumArguments
- }
- i1, ok := tengo.ToInt64(args[0])
- if !ok {
- return nil, tengo.ErrInvalidArgumentType{
- Name: "first",
- Expected: "int(compatible)",
- Found: args[0].TypeName(),
- }
- }
- return wrapError(proc.Signal(syscall.Signal(i1))), nil
- },
- },
- "wait": &tengo.UserFunction{
- Name: "wait",
- Value: func(args ...tengo.Object) (tengo.Object, error) {
- if len(args) != 0 {
- return nil, tengo.ErrWrongNumArguments
- }
- state, err := proc.Wait()
- if err != nil {
- return wrapError(err), nil
- }
- return makeOSProcessState(state), nil
- },
- },
- },
- }
- }
|