github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/core/processes/jobs.go (about)

     1  package processes
     2  
     3  import (
     4  	"github.com/lmorg/murex/lang"
     5  	"github.com/lmorg/murex/lang/state"
     6  	"github.com/lmorg/murex/lang/types"
     7  )
     8  
     9  func cmdJobs(p *lang.Process) error {
    10  	var dt, dtLine string
    11  	if p.Stdout.IsTTY() {
    12  		dt = types.Generic
    13  		dtLine = types.Columns
    14  	} else {
    15  		dt = types.JsonLines
    16  		dtLine = types.Json
    17  	}
    18  	p.Stdout.SetDataType(dt)
    19  
    20  	aw, err := p.Stdout.WriteArray(dt)
    21  	if err != nil {
    22  		return err
    23  	}
    24  
    25  	b, err := lang.MarshalData(p, dtLine, []interface{}{
    26  		"PID",
    27  		"State",
    28  		"Background",
    29  		"Process",
    30  		"Parameters",
    31  	})
    32  	if err != nil {
    33  		return err
    34  	}
    35  	err = aw.Write(b)
    36  	if err != nil {
    37  		return err
    38  	}
    39  
    40  	procs := lang.GlobalFIDs.ListAll()
    41  	for _, process := range procs {
    42  		if process.Background.Get() || process.State.Get() == state.Stopped {
    43  			b, err := lang.MarshalData(p, dtLine, []interface{}{
    44  				process.Id,
    45  				process.State.String(),
    46  				process.Background.Get(),
    47  				process.Name.String(),
    48  				getParams(process),
    49  			})
    50  			if err != nil {
    51  				return err
    52  			}
    53  			err = aw.Write(b)
    54  			if err != nil {
    55  				return err
    56  			}
    57  		}
    58  	}
    59  
    60  	return aw.Close()
    61  }