Usando o GNU Parallel:
parallel my_process {} ::: files*
Isso executará um my_process file
por thread da CPU.
Você pode dizer ao GNU Parallel para ter certeza de que há 10G de RAM livre antes de iniciar o próximo trabalho:
parallel --memfree 10G my_process {} ::: files*
Se a mem livre ficar abaixo de 5G, o GNU Parallel irá matar o trabalho mais recente e reiniciá-lo quando houver 10G livre novamente.