github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/events/onSignalReceived/signal_posix.go (about)

     1  //go:build !plan9 && !js
     2  // +build !plan9,!js
     3  
     4  package signaltrap
     5  
     6  import (
     7  	"fmt"
     8  	"os"
     9  
    10  	"github.com/lmorg/murex/lang"
    11  	"github.com/lmorg/murex/lang/types"
    12  )
    13  
    14  func cmdSendSignal(p *lang.Process) error {
    15  	if p.Parameters.Len() == 0 {
    16  		return autocompleteSignals(p)
    17  	}
    18  
    19  	p.Stdout.SetDataType(types.Null)
    20  
    21  	pid, err := p.Parameters.Int(0)
    22  	if err != nil {
    23  		return err
    24  	}
    25  
    26  	sig, err := p.Parameters.String(1)
    27  	if err != nil {
    28  		return err
    29  	}
    30  
    31  	proc, err := os.FindProcess(pid)
    32  	if err != nil {
    33  		return err
    34  	}
    35  
    36  	if !isValidInterrupt(sig) {
    37  		return fmt.Errorf("invalid signal name '%s'. Expecting something like 'SIGINT'", sig)
    38  	}
    39  
    40  	return proc.Signal(interrupts[sig])
    41  }