Just limit the number of concurrent os.Execs!
For example with a buffered chan struct{}, pre-filled with 8 tokens; pull a token synchronously before OS.Exec, and put the token back after.
Or push the filenames into a chan, and has n goroutines pull and OS.Exec on them.
Thanks
Dave