09.04.2010 | 18:33
Elem, ako ovo gore ne proradi, onda bi ovo moralo:
ls *.inp | while read file; do
orca $file > `basename $file .inp`.out
cekaj=1
while (($cekaj)) ; do
cekaj=0
ps | grep -v grep | grep -q orca && cekaj=1
done
done
Prva dva retka su ti jasna. Treći je inicijalna vrijednost zastavice, a u četvrtom počinje petlja za čekanje, koja se vrti sve dok prilikom testa zastavica ne bude imala vrijednost 0.
Čim se u petlju uđe, zastavicu stavimo na 0, jer želimo da izađe ako je prethodni orca thread završio.
U šestom redu uzmemo listu svih tvojih aktivnih procesa (ps) pa onda iz nje izbacimo redak koji se odnosi na sam grep proces (grep je ugrađeni tekst-filtar) i onda drugim grepom iz onog što je od liste preostalo tražimo ima li redaka s ključnom rječju "orca". Samo ako je IŠTA pronađeno, zastavica se vraća na 1 (nastavljamo čekati). Ako nije ništa pronađeno, prethodni orca thread je završio pa nećemo napraviti ništa.
Kad se unutarnja petlja ponovno zavrti, ako nismo maloprije vratili zastavicu na 1, završit će i onda se nastavlja vanjska petlja gdje se ponovno pokreće orca s idućim inp-om.
Ja sam kod sebe testirao koristeći openssl umjesto orce, s forsiranjem u background (& na kraju retka) i sve mi je radilo pa pretpostavljam da će i tebi. Jedini problem ti može biti ako postoji neki proces koji u imenu sadrži "orca" a da nije povezan s ovom obradom, jer će ti se onda zaglaviti u beskonačnom čekanju. U tom slučaju malo variraj ključnu riječ.