job=(job1 job2 ... jobN) notfinished=true maxjobs=30 nextjob=1 totaljobs=N 
jpath=/usr/local/bin/ while $notfinished; do if [ "$(ps axww|grep -c 
$jpath/job|grep -v grep)" -lt "$maxjobs" ]; then if [ "$nextjob" -lt 
"$totaljobs" ]; then . $jpath/${job[nextjob]} & let nextjob = $nextjob+1 if [ 
"$nextjob" -ge "$maxjobs" ]; then notfinished=false fi fi fi done

On Sâm, sept. 26, 2015 at 12:57 a.m., Dumitru Ciobarcianu
<[email protected]> wrote:

Salut,

Am avut o provocare interesantă săptămâna asta și sunt curios cum ar fi
rezolvat-o alții (there is more than one way to skin a cat).

Se dă o listă de job-uri care se dorește a fi executată. Pentru că
mașina este relativ puternică și se dorește a se scurta durata de
execuție (wall clock) job-urile se pot paraleliza. Pentru că oricât de
puternică este mașina nu are rost să pornești sute de procese în paralel
se dorește ca doar un număr N de job-uri să se execute simultan. Pentru
că fiecare job are o durată variabilă a execuției se dorește ca în
momentul în care un job se termină altul să pornească în loc astfel
încât la fiecare moment dat să existe N joburi rulând în paralel.

A se rezolva în shell.

Mulțumesc,

Dumitru "la final o să dau și ce am folosit eu".
_______________________________________________
RLUG mailing list
[email protected]
http://lists.lug.ro/mailman/listinfo/rlug
_______________________________________________
RLUG mailing list
[email protected]
http://lists.lug.ro/mailman/listinfo/rlug

Raspunde prin e-mail lui