R+ >Rs+ >D+ >Ds+ >S+ >Ss+>
package main import ( "bytes" "fmt" "github.com/ianlopshire/go-fixedwidth" "log" "os/exec" "strings" ) func main() { args := "-o pid,lstart,xstat,comm" cmd := exec.Command("ps", "-Aww", args) var b bytes.Buffer cmd.Stdout = &b cmd.Stderr = &b err := cmd.Run() if err != nil { log.Fatalf("cmd.Run() failed with %s\n", err) } lines := strings.Split(string(b.Bytes()), "\n") data := strings.Join(lines[1:], "\n") var processes []struct { // A structure with tags Pid int `fixed:"1,5"` Lstart string `fixed:"6,35"` Xstat int `fixed:"36,40"` Comm string `fixed:"41,300"` } err = fixedwidth.Unmarshal([]byte(data),&processes) if err != nil { fmt.Println(err) } i := 0 for _,p := range processes { if p.Xstat == 13 { i++ fmt.Println(i, p.Pid, p.Comm) } } }And its sample output as of now:
1 376 /Applications/Parallels Toolbox.app/Contents/MacOS/Parallels Toolbox 2 402 /Library/Input Methods/ParallelsIM.app/Contents/MacOS/ParallelsIM 3 411 /Applications/DrCleaner.app/Contents/MacOS/DrCleaner 4 498 /Applications/Postgres.app/Contents/MacOS/PostgresMenuHelper.app/Contents/MacOS/PostgresMenuHelper 5 2699 /Applications/JetBrains Toolbox.app/Contents/MacOS/jetbrains-toolbox 6 27679 /Applications/Safari.app/Contents/MacOS/Safari 7 27802 /Applications/Parallels Desktop.app/Contents/MacOS/prl_client_app 8 28505 /Applications/Slack.app/Contents/MacOS/Slack 9 28844 /Applications/Utilities/Terminal.app/Contents/MacOS/Terminal 10 28876 /Applications/Sublime Text.app/Contents/MacOS/Sublime Text 11 28924 /Applications/Utilities/Script Editor.app/Contents/MacOS/Script Editor 12 28928 /Applications/Utilities/Activity Monitor.app/Contents/MacOS/Activity Monitor
{"Finder", "Safari", "prl_client_app", "WinAppHelper", "WinAppHelper", "WinAppHelper", "WinAppHelper", "Slack", "Terminal", "Sublime Text", "Script Editor", "Activity Monitor"}More or less, I have what I need (winAppHelpers are applications running in virtual PC - "prl-client-app" and Activity monitor have a better list even showing details about those with their names such as "Microsoft Visual Foxpro 9.0"). I can live with this if I can't find a better way.