package main import ( "flag" "fmt" "jsh" "strings" ) // Converts raw output of "ps" into a slice of Process objects func PsOutputToProcesses(out string) *[]jsh.Process { processes := []jsh.Process{} lines := strings.Split(out, "\n") header, procs := lines[0], lines[1:] numFields := len(strings.Fields(header)) for _, proc := range procs { p, err := jsh.NewProcess(jsh.FieldsN(proc, numFields)) if err == nil { processes = append(processes, *p) } } return &processes } func runJsonMode() { // Run procps-ng "ps" with full output psOut := string(*jsh.FallbackWithArgs("/usr/bin/ps", []string{"auxww"})) processesPtr := PsOutputToProcesses(psOut) finalOut := jsh.JshOutput{*processesPtr, []string{}} fmt.Printf("%s", *finalOut.ToJson()) } func main() { // Parse for JSON flag. jsonModePtr := flag.Bool("json", false, "a bool") flag.Parse() if !*jsonModePtr { fmt.Printf("%s", jsh.Fallback("/usr/bin/ps")) } else { runJsonMode() } }